wireshark分析http协议详解

wireshark工具

一、wireshark分析示例

二、curl命令查看HTTP响应头信息

一、wireshark分析示例

1.清空缓存

在进行跟踪之前,首先清空Web浏览器的高速缓存来确保Web网页是从网络中获取的,而不是从高速缓冲中取得的。之后,还要在客户端清空DNS高速缓存,来确保Web服务器域名到IP地址的映射是从网络中请求。

2.启动wireshark

wireshark分析http协议详解_第1张图片

3.选择接口en0,开始捕获。

wireshark分析http协议详解_第2张图片

4.在浏览器地址栏中输入www.baidu.com,在过滤器中选择HTTP,点击apply。

wireshark分析http协议详解_第3张图片

wireshark分析http协议详解_第4张图片

5.分析数据

在协议框中选择“GET/HTTP/1.1”所在的分组会看到这个基本请求行后跟随着一系列额外的请求首部。在首部后的“\r\n”表示一个回车和换行,以此将该首部与下一个首部隔开。

“Host”首部在HTTP1.1版本中是必须的,它描述了URL中机器的域名,本测试中是www.baidu.com。这就允许了一个Web服务器在同一时间支持许多不同的域名。有了这个首部,Web服务器就可以区别客户试图连接哪一个Web服务器,并对每个客户响应不同的内容。

User-Agent首部描述了提出请求的Web浏览器及客户机器。

接下来是一系列的Accpet首部,包括Accept、Accept-Language、Accept-Encoding、Accept-Charset。它们告诉Web服务器客户Web浏览器准备处理的数据类型。Web服务器可以将数据转变为不同的语言和格式。这些首部表明了客户的能力和偏好。

Keep-Alive及Connection首部描述了有关TCP连接的信息,通过此连接发送HTTP请求和响应。它表明在发送请求之后连接是否保持活动状态及保持多久。大多数HTTP 1.1连接是持久的(persistent),意思是在每次请求后不关闭TCP连接,而是保持该连接以接受从同一台服务器发来的多个请求。

wireshark分析http协议详解_第5张图片

已经查看了由Web浏览器发送的请求,现在来观察Web服务器的应答。响应首先发送“HTTP/1.1 200 ok”,指明它开始使用HTTP 1.1版本来发送网页。同样,在响应分组中,它后面也跟随着一些首部。最后,被请求的实际数据被发送。第一个Cache-control首部,用于描述是否将数据的副本存储或高速缓存起来,以便将来引用。一般个人的Web浏览器会高速缓存一些本机最近访问过的网页,随后对同一页面再次进行访问时,如果该网页仍存

储于高速缓存中,则不再向服务器请求数据。在HTTP请求中,Web服务器列出内容类型及可接受的内容编码。此例中Web服务器选择发送内容的类型是text/html。

wireshark分析http协议详解_第6张图片

二、curl命令查看HTTP响应头信息

客户端(浏览器)从服务器请求数据经历如下基本步骤:

1.用户发起一个http请求,缓存获取到URL,根据URL查找是否有匹配的副本,这个副本可能在内存中,也可能在本地磁盘。

2.如果请求命中本地缓存则从本地缓存中获取一个对应资源的"copy"。

3.检查这个"copy"是否过期,没过期则直接返回,过期则继续向服务器转发请求。

HTTP中,通过Cache-Control首部和Expires首部为文档指定了过期时间,通过对过期时间的判断,缓存就可以知道文档是不是在保质期内。

Expires首部和Cache-Control:max-age首部都是来告诉缓存文档有没有过期,为什么需要两个响应首部来做这件简单的事情?

其实这一切都是历史原因,Expires首部是HTTP 1.0中提出来的,因为使用的是绝对日期,如果服务端和客户端时钟不同步的话(实际上这种情况非常常见),缓存可能就会认为文档已经过了保质期。

4.服务器接收到请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更,更新过期时间。

wireshark分析http协议详解_第7张图片

命令行输入命令

[root@localhost ~]# curl -I http://www.baidu.com/

HTTP/1.1 200 OK

Accept-Ranges: bytes

Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform

Connection: keep-alive

Content-Length: 277

Content-Type: text/html

Date: Mon, 22 Feb 2021 07:42:44 GMT

Etag: "575e1f59-115"

Last-Modified: Mon, 13 Jun 2016 02:50:01 GMT

Pragma: no-cache

Server: bfe/1.0.8.18

HTTP响应头的信息

(1)HTTP返回码

状态码 意义
1xx client的请求,server已经接收,正在处理。
2xx 成功。表示client请求,server端已经接收、理解并处理。
3xx client请求被重定向其它的server(其它的URL)。
4xx 表示client请求不正确,server不能识别。
5xx server端服务不正常。

(2)Cache-Control

web站点对缓存的设置:Cache-Control指定请求和响应遵循的缓存机制。

缓存分类

私有缓存:常见就是浏览器里内置的缓存。

公有缓存:常见的就是代理缓存。

Cache-Control可选的参数:private、public、no-cache、max-age、must-revalidate等。

no-cache:响应不会被缓存,而是实时向服务器端请求资源。

no-store:在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。

Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅描述当前用户的部分响应消息,此响应消息对于其他用户的请求无效。不能在用户间共享。

Public:响应会被缓存,并且在多用户间共享。正常情况,如果要求HTTP认证,响应会自动设置为private。

max-age:指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。

例如:Cache-control: max-age=5表示当访问此网页后的5秒内再次访问不会去服务器。

must-revalidate:响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是最新的(强制所有缓存都验证响应)。

proxy-revalidate:类似于must-revalidate,它要求对公共缓存进行验证。

(3)Connection

server是否支持长连接;如果是keep-alive,说明web的server支持长连接。但是TCP的长连接是双向的;必须是client和server都支持长连接,才可以建立长连接。

一般client浏览器都是默认支持长连接;所以只要sever端支持长连接,就可以建立长连接。

通过curl的-w参数可以自定义curl的输出,%{http_code}代表http状态码。

[root@localhost ~]# curl -I -o /dev/null -s -w %{http_code}"\n" www.baidu.com

200

你可能感兴趣的:(wireshark,http,php)