HTTP协议

HTTP概念

HTTP(超文本传输协议),允许浏览器连接WEB服务器来浏览网页,HTTP是WEB系统核心的内容,它是WEB服务器和客户端之间进行传输数据的规则,WEB服务器就是网站,是信息内容的发布者,最常见的客户端就是浏览器,用于信息的接收。HTTP是无状态的协议,所谓无状态就是客户端和服务器之间不需要持久的连接,意思就是客户端向服务器发出请求,服务器返回响应后,连接就关闭了,服务器也不会保存连接的信息。HTTP遵循的是请求与应答的模型,客户端向服务器发送请求,服务器处理请求并返回应答,HTTP连接都被构造成一套请求和应答。在这个过程中需要经过4个阶段,建立连接,发送请求信息,发送响应信息,关闭连接。

分析准备

现在我们打开一个网页开始浏览的同时,使用Wireshark捕获数据包。在我们浏览网页的同时Wireshark一直在捕获数据包。然后我们关闭网页,关闭Wireshark捕获。保存成文件HTTP。

HTTP协议分析

打开以上捕获的文件,发现了捕获了太多的数据包,这里我们就要使用筛选器来对数据包进行筛选,浏览网页使用的时GET方法,所以在筛选器中输入http.request.method==GET回车。这样就可以筛选出所有的使用GET方法数据包。

筛选完成后,可以发现包号为55的数据包排在了第一位。这个就是需要寻找的跟蜗牛学院这个网站建立连接的HTTP的数据包。我们可以对这个数据包做一个作色的处理,这样于这个数据包相关的数据包都会拥有相同的颜色。

着色后。

现在将筛选器中的筛选条件清0,就会发现与这个数据包有关的所有数据包都是同一个颜色。

将与这个着色数据包相关的数据包另存为另外一个文件,以方便我们的使用。使用ctrl选定着色的数据包。

然后点击左上角文件,在子目录里面点击导出特定分组。

出现以下弹出窗口。

在这里输入想要命名的文件名,然后再下面选择selected packet。然后点击保存。这里是刚才保存的选择后的文件。

双击打开此文件,这里就可以看到这个文件就是我们选择保存的所需要的数据包。

打开文件就可以发现整个通信是从192.168.20.150到101.37.65.91的tcp三次握手开始的。

标记为HTTP的数据包就是由服务器发往客户端的。

打开这个HTTP数据包。

可以看到这个HTTP数据包通过TCP被传输到服务器的80端口,也就是HTTP的标准端口(8080端口也会被HTTP所使用)。

我们将HTTP展开后发现,HTTP数据包所请求的方法是GET。所请求的URI,请求的版本是HTTP的1.1版本。这个信息告诉我们这个客户端请求使用HTTP的1.1版本下载WEB服务器的根目录也就是URI/

上图我们可以看到这里HTTP使用的请求方法是GET,使用的是HTTP1.1版本,还可以看到支持什么文本格式,有text、html、xhtml、xml等等。然后支持的语言中文。下面图片有对get方法的解释。

上面这个图代表着:

User-agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示。

Accept-Encoding表示Http响应是否进行压缩,一般的浏览器在访问网页时,是默认在请求头中加入。
Accept-Encoding: gzip, deflate ,表示这个请求的内容希望被压缩,压缩的目的是为了减少网络流量,但是这个只是协议,只能是要求而不是强制的,如果服务器不支持压缩或者没有开启压缩,则不能起到作用。

Host是客户端指定自己想访问的http服务器的域名/IP 地址和端口号。

Host字段可以是域名,也可以是ip地址。Host字段域名/ip后可以跟端口号,如Host: www.sina.com:8080

Host可以由程序自定义,某些程序为了防止运营商或防火墙拦截会定义虚假Host。

Connection:keep-alive

http是一个无状态的面向连接的协议。

http无状态:无状态协议是指http协议本身对于事务处理没有记忆功能,服务器不知道浏览器的状态。通俗的即使你登录了,去访问同一个网站的不同网页,服务器都不会知道你是谁,如果需要记录登录用户的信息,用户操作,用户行为等数据需要使用cookie或session来存储。

keep-alive:从HTTP/1.1起,浏览器默认都开启了Keep-Alive,保持连接特性,客户端和服务器都能选择随时关闭连接,则请求头中为connection:close。简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的TCP连接。但是Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

误解:无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。即使http在无状态下,只要客户端和服务器的头部信息connection:keep-alive,则在有效期内他们使用同一条TCP连接。

从5号数据包到27号数据包传输所请求的数据,http只被用来发布client到server的应用层命令,除了从这些到从开始到结束,是看不到应用层的控制信息的。

我们在5到27号包里面可以看到通过TCP数据包分片传输的数据和来自于client确认的星期,最后分片发送完毕后,我们的数据包重组装已经完成。然后就到了27号数据包确认数据传输完成。

 

阅读剩余
THE END