超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
HTTP协议在Wireshark数据包中是如何体现的?在此之前,先熟悉HTTP协议。
在 HTTP 协议中,客户端发送请求包到服务器,服务器接收请求并返回响应包给客户端。流程如下:
1.客户端发起请求:
2.服务器接收请求:
3.服务器处理请求:
4.服务器发送响应:
5.客户端接收响应:
6.客户端处理响应:
访问百度,触发HTTP协议:
ping命令得到ip后,用ip.addr过滤数据包:
三次握手的流程本文不再赘述,在这篇文章有详析介绍:【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手
重点观察中间红框内的三个包
第一个包的内容:
讲解:
请求包包括请求行(包含请求方法、请求URL、HTTP版本)、请求头(包含请求的客户端的信息)、请求体(POST等类型的请求含有请求体)。
第一个包为请求包,我们先看请求行:
REQUEST METHOD:HEAD 表示请求方法为head,用来获取报文首部;
REQUEST URI:/ 表示我们没有请求特定的url,默认为/;
REQUEST VERSION:HTTP/1.1 表示HTTP版本为1.1。
再看请求头:
请求头的存在形式是每个请求头占一行
Host:baidu.com\r\n 表示目标主机为baidu.com,并且以 \r\n 结尾以便与下一个请求头字段进行分隔。
User-Agent表示代理,即浏览器类型,由于我们使用的是curl命令,所以显示curl/8.4.0。
Accept:浏览器可接受的MIME类型,这里为*/*,表示可以接受任何类型的响应,包括文本、图像、音频、视频等。
由于我们没有进行POST等请求,因此没有请求体。
接着观察第三个包
第三个包为响应包
讲解:
状态行:包含响应版本和响应状态码、提示信息
响应头(以每个占一行的形式存在):包含响应的服务器的资源信息
我们先看状态行:
再看响应头:
1.Date表示服务端(即baidu.com)发送响应报文的时间
2.Server表示服务器版本
3.Last-Modified表示请求的对象创建或者最后修改的时间
4.ETag表示对象的标志值,如果对象修改了,这个值也会改变。
5.Accept-Ranges表示支持的范围单位,图中表示该服务器支持按字节范围请求资源
6.Content-Length表示内容长度,图中表示内容长度为81。
7.Cache-Control缓存控制,它指定了资源在被缓存之后可以被重用的最长时间,以秒为单位。图中"max-age=86400" 表示资源可以在缓存中保留一天(24小时)。
8.Expires表示该资源的缓存有效期截止时间,这个时间前,可以直接访问缓存副本。
9.Connection:连接类型,Keep-Alive表示这是一个长链接,可以继续用这个连接通信。
10.Content-Type用于指示响应主体的媒体类型,图中 “text/html” 表示响应的主体是 HTML 格式的文本内容,这意味着客户端收到这个响应后会知道要以 HTML 的方式进行解析和显示。
请求及响应报文可以通过追踪HTTP流显示: