HTTP协议简析《图解http》

一、概念

协议:协议是指计算机通信网络中两台计算机之间进行通信所必须遵守的规定规则

HTTP协议:通常被翻译为“超文本传输协议”,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议(互联网> 因特网> 万维网)。它允许将超文本标记语言(html)文档从Web服务器传送到客户端的浏览器。HTTP1.1是如今浏览器主流的超文本传输协议版本。HTTP协议是一个应用层协议。

TCP/IP协议族:因特网所有的传输都是通过TCP/IP进行的,HTTP协议是TCP/IP协议族的一个子集。其它的协议有:IEEE,FDDI,ICMP,IP,PPPoE,DNS,UDP,TCP,FTP,HTTP,SNMP,FDDI等。TCP/IP协议族。TCP/IP协议族中最重要的一点就是分层

TCP/IP分层管理:TCP/IP协议族按层次分为:应用层传输层网络层数据链路层

  • 应用层:决定了向用户提供应用服务时通讯活动。FTP,DNS,HTTP都处于应用层。
  • 传输层:为上层应用层提供网络连接中两台计算机的数据传输,TCP,UDP处于传输层。
  • 网络层:该层决定了通过怎样的路径到达目标计算机,并将数据包传送给对方。
  • 链路层:用来处理连接网络的硬件部分,包括操作系统,硬件的设备驱动,网卡等。

二、TCP/IP通信传输流

利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下,接收端反之

HTTP协议通信举例:

应用层(HTTTP协议)发送web页面http请求,DNS协议解析域名成IP地址 ==>(TLS/SSL协议,https才有这一层) ===> 传输层(TCP协议)将数据分割,加TCP首部 ==> 网络层(IP协议)增加MAC地址,搜索目标地址传送 ==> 链路层 ==> 服务端正好相反过程。

《图解HTTP》中TCP/IP通信传输截图如下:

图解HTTP.png

三、与HTTP关系密切的协议

  • DNS协议,位于应用层,提供域名和IP地址之间的解析服务

  • TCP协议,位于传输层,提供可靠的字节流服务。字节流指:为方便传输将大块数据分割成以报文段为单位的数据包进行管理。可靠指:能够把数据准确可靠的传给对方(为了确认数据的传达,采用了三次握手策略)。

  • IP协议,位于网络层,将各种数据包传送给对方,要想实现需要两个重要的条件:IP地址和MAC地址。IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址,IP地址可以和MAC地址配对,IP地址是可变的,MAC一般是不可变的。

    IP地址之间通信依赖MAC地址,需要经过多台网络设配中转才能连接到目标设备,过程中会利用中转设备的MAC地址搜索下一个中转目标。这时会采用ARP协议,通过IP地址就可以反查出对应的MAC地址。

其它

  • URI/URL

    URI是统一资源标识符;URL是统一资源定位符,是URL的子集。

    URI相当于用身份证来确定一个人。URL是通过住址来确定这个人。

================================

一、概念

HTTP协议:TCP/IP协议族的一个子集,用于客户端和服务端通信必须遵守的规则。通过请求方法请求和相应的交换达成客户端和服务端的通信。

二、请求方法

告知服务器意图的HTTP方法。

  • GET:获取资源
  • POST: 传输实体主体
  • PUT: 传输文件
  • DELETE: 删除文件
  • HEAD、OPTIONS、TRACE、CONNECT

三、HTTP报文

用于HTTP协议交互的信息称为HTTP报文,请求端的HTTP报文称为请求报文,响应端的称为响应报文。HTTP报文本身是字符串文本。

HTTP请求报文主要分为请求行、请求头(首部)、主体。

  • 请求行

    ①方法 ②URI ③HTTP协议

  • 请求头

    请求首部、通用首部、实体首部 (下面分析)

  • 主体

    请求的入参、

HTTP响应报文主要分为状态行、响应头(首部)、主体。

  • 状态行

    ①协议版本 ②状态码 ③原因

  • 响应头

    响应首部、通用首部、实体首部(下面分析)

  • 主体

    响应的出参

关于常用的首部列表如下(参考HTTP全部报文首部字段):

请求首部

首部字段名 说明
Accept 用户代理可处理的媒体类型text/html
Accept-Encoding 优先的内容编码gzip
Accept-Language 优先的语言en-us,zh
Expect 期待服务器的特定行为
Host 请求资源所在服务器www.jianshu.com
if-Match 比较实体标记(ETag)缓存有关
if-Modified-Since 比较资源的更新时间 缓存有关
Referer 对请求中URI的原始获取方法 http://**/f6507
User-Agent HTTP客户端程序的信息 Mozilla/5.0...

通用首部字段

首部字段名 说明
Cache 控制缓存的行为,不读取本地缓存
Connection 逐跳首部、连接的管理,持续连接相关
Date 创建报文的日期时间

响应首部字段

首部字段名 说明
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间 缓存有关
ETag 资源的匹配信息 缓存有关
Location 令客户端重定向至指定的URI

实体首部字段

首部字段名 说明
Content-Range 实体主体的位置范围 “
Content-Type 实体主体的媒体类型 application/json; charset=utf-8
Expires 实体主体过期的日期时间 缓存有关
Last-Modified 资源的最后修改日期时间 缓存有关
Set-Cookie 服务器返回给客户端设置缓存

四、状态码

状态码是用来告知从服务器请求来的结果

状态码 描述
1xx 请求正在处理
2xx 请求正常处理完毕(success)
3xx 重定向
4xx 客户端错误
5xx 服务端错误

只要遵守状态码类别的定义,即使改变RFC2616中定义的状态码,或服务器端自行创建状态码都是没有问题的。

五、持续连接

在HTTP协议初始版本中,每进行一次HTTP通信就要断开一次TCP连接。为了解决这一问题,在HTTP/1.1版本中加入了持续连接(默认是开启的)。

持续连接使得多数请求以管线化方式发送成为可能。这样就可以做到并行发送多个请求。

六、cookie

无状态:HTTP协议是无状态协议,它不对之前发送过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。

最常见的例子是,登录态无法被保持住。为了解决这一问题,引入了cookie技术,cookie技术是通过在请求和响应首部中加入相关信息,从而达到客户端和服务端的相互识别的通信。

客户端发送请求 ==> 服务端生成session,在响应首部加入set-Cookie ==> 第二次请求中带入cookie ==> 检测cookie,识别身份

除了cookie以外,为了服务器性能等提出了tooken技术,具体可参考干掉状态:从session到token

参考

《图解HTTP》

HTTP全部报文首部字段

干掉状态:从session到token

====================================

一、虚拟主机

HTTP1.1规范允许一台HTTP服务器搭建多个web站点,这是利用了虚拟主机的功能。

两个不同的域名,通过DNS协议映射到IP地址(域名解析)从而访问目标站点,此时访问到相同IP地址。因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。

二、数据转发程序

这些应用程序和服务器可以将请求转发给通信线路上的下一站服务器,并能接收从那台服务器发送的响应再转发给客户端。

1.代理

代理服务器的本质是接收客户端发送的请求后转发给其他服务器。代理不改变请求URI,会直接发送给前方持有资源的目标服务器。每次通过代理服务器请求或响应时,会追加写入Via首部信息。

主要功能:

  • 突破自身IP访问限制,访问国外网站。
  • 访问单位内部资源,FTP之类。
  • 提供访问速度,代理服务器设置了缓存。
  • 隐藏真实IP。
  • 针对特定网站的访问控制,已获取访问日志。

2.网关

从一个网络向另一个网络发送信网关息,也必须经过一道“关口”,这道关口就是网关。网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非HTTP协议

利用网关是为了提供通信的安全性,因为可以在客户端与网关之间的通信线路上加密以确保连接的安全。例如网关可以连接数据库等。

3.隧道

隧道可以按要求建立起一条与其他服务器的通信线路,使用SSL等加密手段进行通信。隧道的目的是为了确保数据交互的安全性。整个过程中不会解析HTTP协议。

三、资源缓存

缓存服务器是代理服务器的一种,当代理转发从服务器返回的响应时,代理服务器将会保存一份资源的副本。

缓存服务器的优势在于利用缓存可避免多次从服务器获取,而其中缺点是版本更新时可能获取过时的旧资源。为了解决此问题,可以通过设置缓存的有效期等手段,向原服务器确认资源的有效性。

缓存不仅可以存在于缓存服务器,也可以存在客户端的浏览器中。

=======================================

一、Web攻击

简单的HTTP协议本身并不存在安全问题,并不会成为攻击对象,然而应用HTTP协议的服务器客户端,以及运行在服务器上的Web**应用资源**才是攻击目标。

HTTP最初的设计是一个通用的单纯协议机制,具备较多的优势,但是也有明显的安全性方面的劣势。好在如今大多数的Web网站都会使用会话管理(session)、加密处理等安全性方面的功能。

Web应用的攻击模式

  • 主动攻击
  • 被动攻击

【主动攻击】是攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器的资源进行攻击,因此攻击者需要能够访问到那些资源。代表性的攻击有SQL注入攻击OS命令注入攻击

【被动攻击】是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。代表性的攻击有跨站脚本攻击跨站点请求伪造

被动攻击通常的攻击模式如下:

  • 步骤1:攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求。
  • 步骤2:当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
  • 步骤3:中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码。
  • 步骤4:执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持有的Cookie等个人信息被窃取,登录状态中的用户权限被恶意滥用的结果。

SQL注入攻击(主动攻击)

SQL注入是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。

Web应用通常需要用到数据库,当需要对数据库表内的数据进行检索或添加、删除等操作时,会使用SQL语句连接数据库进行特定的操作。如果在调用SQL语句的方式上存在疏漏,就可能执行被恶意注入非法SQL语句。

Web安全之SQL注入攻击技巧与防范

OS命令注入攻击(主动攻击)

是指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就存在被攻击的风险。

跨站脚本攻击(被动攻击)

是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。尤其动态创建(用户输入)的HTML部分有可能隐藏着安全漏洞(富文本编辑器)。

XSS 跨站脚本攻击Cross Site Script)

HTTP首部注入攻击(被动攻击)

是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或者主体的一种攻击。在发送请求时修改Location以及Set- Cookie可强制设置任何Cookie信息以及重定向至任何URL。

还有一种将两个%0D%0A并排插入字符串后发送,利用这两个连续的换行就可作出HTTP首部与主体分隔所需的空行了,这样就能显示伪造的主体,达到攻击目的。这种攻击叫做HTTP响应截断攻击。

其他的攻击还包括:邮件首部注入攻击、目录遍历攻击、远程文件包含漏洞、强制浏览、不正确的错误消息处理、开发重定向、会话劫持、跨站点请求伪造等攻击方式。详细可查看书籍《图解HTTP》。

二、加密处理

近代的加密方法中加密的算法一般是公开的,而密钥却是保密的。通过这种方式得以保持加密方法的安全性。

加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。如果密钥被攻击者获取,那加密也就失去了意义。

共享密钥加密

又称对称密钥加密,同用一个密钥的方式称为共享密钥加密。

在互联网上转发密钥时,如果通信被监听那么密钥就可能落入攻击者之手,同时失去了加密的意义。

公开密钥加密

公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。

使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私钥进行解密。

而再之后出现了证明公开密钥正确性的证书,会在接下来的HTTPS中详细讲解。

三、安全的HTTPS

前面讲过HTTP在安全性方面有很多缺陷,比如HTTP协议中的请求和响应不会对通信方进行确认。也就是说存在”服务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题。

SSL协议

虽然使用HTTP协议无法确定通信方,但是如果使用SSL则可以。SSL不仅提供了加密处理,摘要功能,而且还使用了一种被称为证书的手段,可用于确定通信方。

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

HTTPS**并非是应用层的一种新协议**,只是HTTP通信接口部分用SSL(安全套接层)和TLS(安全传输层协议)协议替代而已。所谓的HTTPS,其实就是身披SSL协议这层外壳的HTTP。

数字证书

遗憾的是,公开密钥加密方式还是存在一些问题的。那就是无法证明公开密钥本身就是货真价实的公开密钥。比如,正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输途中,真正的公开密钥已经被攻击者替换掉了。

为了解决上述问题,可以使用由数字证书认证机构和其相关机关颁发的公开密钥证书。首先,服务器的运营人员向数字证书认证机构提出公开密钥的申请。数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。

具体在Web通信中证书如何运作,可以参考下图:

整个HTTPS的通信流程大致如下:

虽说HTTPS通信建立了一个安全通道的信息传输环境,但是也存在一些问题,那就是当使用SSL时,它的处理速度会变慢。HTTPS比HTTP通信要慢2到100倍

猜你喜欢

转载自blog.csdn.net/qq_33388137/article/details/79524577