前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP数据包头部格式解读1

HTTP数据包头部格式解读1

作者头像
望月从良
发布2020-06-02 17:23:42
8780
发布2020-06-02 17:23:42
举报
文章被收录于专栏:Coding迪斯尼Coding迪斯尼

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, 客户端通过该指令要求服务器返回的信息必须在指定时间后修改过才能返回,它主要用于客户端检测所需数据是否更新以避免没有必要的数据传输。

其他两种类型的数据包头和相关指令将在后续章节进行解读,更多详实内容请点击“阅读原文”链接

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding迪斯尼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档