HTTP实战之Wireshark抓包分析( 三 )


(3)字段名后?必须紧接着“:” , 不能有空格 , ?“:”后的字段值前可以有多个空格
(4)字段的顺序是没有意义的 , 可以任意排列不影响语义 。
(5)字段原则上不能重复 , 除?这个字段本身的语义允许 , 例如 Set-Cookie 。
1.4 常用头字段
HTTP 协议规定了?常多的头部字段 , 实现各种各样的功能 , 但基本上可以分为四?类:
(1)通?字段:在请求头和响应头?都可以出现 。
(2)请求字段:仅能出现在请求头? , 进?步说明请求信息或者额外的附加条件 。
(3)响应字段:仅能出现在响应头? , 补充说明响应报?的信息 。
(4)实体字段:它实际上属于通?字段 , 但专?描述 body 的额外信息 。
对 HTTP 报?的解析和处理实际上主要就是对头字段的处理 , 理解了头字段也就理解了 HTTP 报? 。 主要讲?个最基本的头 , 看完了它们你就应该能够读懂?多数 HTTP 报?了 。
(5)User-Agent
User-Agent是请求字段 , 只出现在请求头? 。 它使??个字符串来描述发起 HTTP 请求的客户端 , 服务器可以依据它来返回最合适此浏览器显示的?? 。
但由于历史的原因 , User-Agent ?常混乱 , 每个浏览器都?称是“Mozilla”“Chrome”“Safari” , 企图使?这个字段来互相“伪装” , 导致 User-Agent 变得越来越? , 最终变得毫?意义 。 不过有的?较“诚实”的爬?会在 User-Agent ??“spider”标明??是爬? , 所以可以利?这个字段实现简单的反爬?策略 。
(6)Accept
Accept是请求字段 , 代表客户端希望接受的数据类型 。 ?如Accept:text/xml(application/json) 。 代表客户端希望接受的数据类型是xml(json )类型 。 ?如Accept: */*则说明客户端接收所有类型的数据 。
(7)Host
?先要说的是Host字段 , 它属于请求字段 , 只能出现在请求头? , 它同时也是唯??个 HTTP/1.1 规范?要求必须出现的字段 , 也就是说 , 如果请求头?没有 Host , 那这就是?个错误的报? 。
Host 字段告诉服务器这个请求应该由哪个主机来处理 , 当?台计算机上托管了多个虚拟主机的时候 , 服务器端就需要? Host 字段来选择 , 有点像是?个简单的“路由重定向” 。
如在 127.0.0.1 上有三个虚拟主机:“www.chrono.com”“www.metroid.net”和“origin.io” 。 那么当使?域名的?式访问时 , 就必须要?Host 字段来区分这三个 IP 相同但域名不同的?站 , 否则服务器就会找不到合适的虚拟主机 , ?法处理 。
(8)Range
Range是请求字段 。 如Range: bytes=5001-10000 对于只需获资源的范围请求 , 包含?部字段 Range 即可告知服务器资源的指定范围 。 上?的示例表示请求获取从第 5001 字节到第 10000 字节的资源 。
如Range: bytes=0 , 则是请求所有的数据 。 接收到附带 Range ?部字段请求的服务器 , 会在处理请求之后返回状态码为 206 Partial Content 的响应 。 ?法处理该范围请求时 , 则会返回状态码 200 OK 的响应及全部资源 。
(9)Connection
管理持久连接 。
close 断开连接 。
Connection: close
HTTP/1.1版本的默认连接都是持久连接 。 为此 , 客户端会在持久连接上连续发送请求 。 当服务器端想明确断开连接时 , 则指定 Connection ?部字段的值为 close。
Keep-Alive 保持连接
keep-alive:从HTTP/1.1起 , 浏览器默认都开启了Keep-Alive , 保持连接特性 , 客户端和服务器都能选择随时关闭连接 , 则请求头中为connection:close 。 简单地说 , 当?个??打开完成后 , 客户端和服务器之间?于传输HTTP数据的TCP连接不会关闭 , 如果客户端再次访问这个服务器上的?? , 会继续使?这?条已经建?的TCP连接 。 但是Keep-Alive不会永久保持连接 , 它有?个保持时间 , 可以在不同的服务器软件(如Apache)中设定这个时间 。
Connection: keep-alive
HTTP/1.1 之前的版本的默认连接都是?持久连接 。 为此 , 如果想在旧版本的HTTP协议上维持持续连接 , 则需要指定 Connection ?部字段的值为 keep-alive。 客户端发送请求给服务器时 , 携带此参数和值 , 服务器也会加上字段和值进?返回响应 。
http是?个?状态的?向连接的协议 。
?状态协议是指http协议本身对于事务处理没有记忆功能 , 服务器不知道浏览器的状态 。 通俗的即使你登录了 , 去访问同?个?站的不同?? , 服务器都不会知道你是谁 , 如果需要记录登录?户的信息 , ?户操作 , ?户?为等数据需要使?cookie或session来存储 。
注意:理解无状态协议(更多理解是一种无记忆) , ?状态不代表HTTP不能保持TCP连接 , 更不能代表HTTP使?的是UDP协议(?连接) 。 即使http在?状态下 , 只要客户端和服务器的头部信息connection:keep-alive , 则在有效期内他们使?同?条TCP连接 。