现在的位置: 首页 > 综合 > 正文

Http协议分析

2013年12月12日 ⁄ 综合 ⁄ 共 1494字 ⁄ 字号 评论关闭

HTTP(HyperText Transfer Protocol)

 

HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。

  • 使用 HTTP 的 URL 的一般形式

       http://<主机>:<端口>/<路径>

HTTP 的默认端口号是 80,通常可省略,也可以自己搭建http服务器指定端口。

 

HTTP主要特点:

  •  HTTP 是面向事务的客户服务器协议。
  •  HTTP 1.0 协议是无状态的(stateless)。
  •  HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。

 HTTP报文结构

  • 请求报文——从客户向服务器发送请求报文。
  •  响应报文——从服务器到客户的回答。
  •  由于 HTTP 是面向正文的(text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。

HTTP版本

以前是1.0,目前是1.1。区别:

现结合如下图说明

RTT(Round-Trip Time):往返时间

HTTP1.0主要缺点:

       就是每请求一个文档就要有两倍RTT的开销。若一个主页上有很多链接的对象(如图片等)需要依次进行链接,那么每一次链接下载都导致2 * RTT的开销。另一种开销就是万维网客户和服务器为每一次建立新的TCP连接都要分配缓存和变量。特别是万维网服务器往往要同时服务于大量客户的请求,这样会使万维网服务器的负担很重。好在浏览器都提供了能够打开5到10个并行的TCP连接,而每一个TCP连接处理客户的一个请求。因此,使用并行TCP连接可以缩短响应时间。

HTTP1.1较好地解决了这个问题,它使用了持续连接(persistent connection)。

  • 万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。
  •  这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。
  • 目前一些流行的浏览器(例如,IE 6.0)的默认设置就是使用 HTTP/1.1。

持续连接的两种方式:

  • 非流水线方式:客户在收到前一个响应后才能发出下一个请求。这比非持续连接的两倍 RTT 的开销节省了建立 TCP 连接所需的一个 RTT 时间。但服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。
  •  流水线方式:客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个 RTT时间,使 TCP 连接中的空闲时间减少,提高了下载文档效率。

 关于Cookie

  • 万维网站点使用 Cookie 来跟踪用户。
  •   Cookie 表示在 HTTP 服务器和客户之间传递的状态信息。
  •   使用 Cookie 的网站服务器为用户产生一个唯一的识别码。利用此识别码,网站就能够跟踪该用户在该网站的活动。 

 使用WireShark, 访问www.google.com抓包实例:

 

 头三个包是tcp连接,之后是http的get请求包,然后服务器返回一个ack包表示接受到请求包,接着就开始发送命令为302的响应包(Found),表示重定向,若要完成请求还必须采取进一步的行动,可以看到它的首部字段Location已经给出了新的URL。

 

www.csdn.net 在登录已注册用户名抓包实例:

在No为24的http响应封包中可以看到首部行中的Set-Cookie段。

比如在登录后的任一http请求包中,都可以看到在首部行中带有Cookie段。

一般Cookie都经过加密。

 

参考:谢希仁《计算机网络》(第5版)

转载请注明!

抱歉!评论已关闭.