HTTP数据包头部格式解读1

Posted Coding迪斯尼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP数据包头部格式解读1相关的知识,希望对你有一定的参考价值。

HTTP协议的大部分功能其实通过其协议包头来实现。因为HTTP协议包头作用如此重要,因此需要单独列出一节来详细讲解。协议包头大体上分为4类,分别为通用包头,请求包头,回复包头,和实体包头。
先看看通用包头的主要作用。第一就是缓存控制,在协议包头中存有很多类型的指令,这些指令用于控制发送数据的设备执行指定操作,这里我们举出关于缓存指令的集中常见情况来说明:
缓存控制指令
HTTP消息类型
具体描述





no-cache
在请求和回复数据包中使用
当头部存在该指令时,他要求接收数据包的设备将后续接收到的数据包要及时发送出去不得扣留,如果要缓存数据的话,设备必须与服务器沟通以便确保缓存的数据保持有效性

public
回复数据包中
它表明该数据包可以被任何设备缓存

private
回复数据包中
它表明数据发送给指定接收者因此不能用于缓存

no-store
在请求或回复数据包中
它表明当前数据包不可以被缓存,这是为了防止敏感信息被缓存后造成泄漏

max-age
在请求或回复数据包中
如果出现在请求数据包中,它表明设备只会接收时间不超过指定日期的缓存数据回复。如果出现在回复数据包中,它表明返回数据的“有效期”。

s-massage
回复数据包
它出现在回复数据包里,告诉所有接收该数据包的设备在缓存该数据包内数据的时长不要超过给定时期。

min-fresh
请求数据包
它是客户端告诉服务器,要它返回的数据有效性要在给定时期内给予保证

max-stale
请求数据包
如果该指令不附带参数的话说明客户端不担心服务器返回过期的数据,如果该指令包含了数字参数,它则告诉服务器确保返回的数据过了有效期不要超过给定时间

only-if-cache
请求数据包
它只在特殊情况下使用,它要求回复的内容必须来自特定的缓存,这个特定缓存的数据甚至可以不是来自于目标服务器

must-revalidate
回复数据包
它告诉中间缓存设备对某些特定回复包在数据过了有效期后要及时从服务器那里获得有效数据。

proxy-revalidate
回复数据包
该指令与上一条相同,但它只针对特定的缓存服务器

no-transform
请求或回复数据包
有些时候被缓存的数据其格式会发生变化,一旦格式改变了,如果设备还接收改变前的数据就可能出现错误。客户端或服务器会发生包含该指令的数据包要求对方不要修改数据格式

通用包头还用于控制连接的指令。例如当包头中含有指令Connection:close时,即使双方使用HTTP1.1版本的协议,该协议能支持持久连接,但一旦看到该指令,那么一次数据传输结束后,连接会被强行中断。在通用包头中经常包含Date指令,它用于表明该消息发送时间,例如Date:Wed,06 Aug 2003 16:43:50 GMT。指令Pragma用于启动某种特定功能,例如Pragma: no-cache就告诉所有收发路径上的设备不要缓存数据。还有Transfor-Encoding也是常有指令,该指令要求数据的发送或接收方采用特定格式编码或解码数据,该指令在后面还会具体说明。Upgrade指令用于客户端去表明自己还能支持哪种协议,如果服务器也支持客户端支持的协议,那么双方就能使用该指令将HTTP连接转换为特定协议的连接。
Via指令常被中间设备使用,以便用于通知接收数据的客户端,它当前接收的数据包到底经过了哪几种设备,Warning指令用于提供多余的关于当前数据包状态的信息,该指令经常作用于缓存,它的格式跟返回码一样,也是三位数值后面跟着字符串说明,例如下表列出了常用的Warning指令信息:
警告指令数字码
描述符串
具体描述



110
Response is stale
如果回复给客户端的数据来自缓存而且已经过了指定有效期那么就必须包含该指令
111
Revalidation failed
缓存服务器试图更新缓存信息但是失败了,因此只能返回已经过期的数据
112
Disconnected operation
当前缓存已经脱离了其他网络
113
Heuristic expiration
当缓存设定的有效期多余24个小时,而且超过了24小时候客户端请求该缓存时要发送该指令
199
Miscellaneous warning
该指令没有具体含义
214
Transformation applied
它警告接收方,缓存服务器对数据的格式进行了修改
299
Miscellaneous persistent warning
同199一样,它没有表示具体含义
我们再看HTTP请求包头的内容,顾名思义这样的包头只出现在请求数据包中。请求包头一来可以让客户端将其自身信息发送给服务器,第二,能够展现当前请求包的特性;第三,它能给客户端用于控制服务器如何处理它的请求。请求包头是四种包头中格式和类型最为复杂的一种。我们看看几种常用的包头类型,第一种叫Accept,它允许客户端告诉服务器它能接受怎样的媒体类型,通常它会列举出可以接受的MIME类型;第二种是Accept-Charset,它告诉服务器客户端可以解读的字符集;第三种是Accept-Encoding,该指令是客户端告诉服务器可以使用那种编码方式对数据进行编码;
第四种叫Accept-Language,它表示客户端支持的语言类型;5,Authorization,它用于让客户端给服务器提交认证信息,当服务器返回401回复码时,客户端才需要使用该请求包头。包头中包含类似于”WWW-Authenticate”的指令,其中说明了客户端用于认证的重要数据和方法。6:Expect,它表明客户端期待服务器会采取的几种行动,如果服务器不支持该指令中列举的行为就会回复417.7:From,它包含了发送该消息包的人的邮件地址,该指令基本没什么作用;8:Host,该指令能让多个域名对应的服务器都可以被认为是当前请求包的接收对象;9:If-Match,该指令是客户端告诉服务器,它返回的数据只有满足给定条件才能被接收;10:If-Modified-Since, 客户端通过该指令要求服务器返回的信息必须在指定时间后修改过才能返回,它主要用于客户端检测所需数据是否更新以避免没有必要的数据传输。
其他两种类型的数据包头和相关指令将在后续章节进行解读,更多详实内容请点击“阅读原文”链接

以上是关于HTTP数据包头部格式解读1的主要内容,如果未能解决你的问题,请参考以下文章

抓包的ip分组的包头在哪里

Android 安装包优化资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )

网络基础tcp/ip协议四

Wireshark数据包分析之UDP协议包解读

网络层协议

网络层协议介绍及概述