专栏首页Coding迪斯尼HTTP数据包头部格式解读1

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

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

本文分享自微信公众号 - Coding迪斯尼(gh_c9f933e7765d),作者:陈屹

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HTTP协议原理及java实现:数据的基本传输模式

    zu说到基于TCP协议的上层协议,绝对绕不开的是HTTP协议,在其设计之初,设计者绝对想不到该协议具备的灵活性能够让其成为最广泛使用的TCP上层协议,在我看来H...

    望月从良
  • java开发HTTP协议:HTTP协议的方法详解

    第一行第一个单词是”GET”,客户端会根据对服务器的请求来指定该单词,因此第一行第一个单词被称为HTTP协议的方法。客户端发送给服务器的请求数据包,第一个单词永...

    望月从良
  • java实现FTP协议:wireshark抓包解析

    本节我们看看ftp协议的数据包格式,同时使用代码加以实现。首先我们现在机器上安装ftp服务器,我在自己的机器上安装了QuickFTP Server,它是我随便找...

    望月从良
  • 读C#开发实战1200例子记录-2017年8月14日11:20:38获取汉字编码值

    landv
  • 优化网站性能必备的6种架构方案,你知道吗?

    一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完...

    技术zhai
  • 个性化推荐沙龙 | 饿了么推荐系统的从0到1(含视频)

    本文来自陈一村在携程个性化推荐与人工智能Meetup上的分享。 陈一村 ,饿了么数据运营部资深算法工程师。2016年加入饿了么,现从事大数据挖掘和算法相关工作,...

    携程技术
  • 全面、简单理解朴素贝叶斯(Naive Bayes)

    朴素贝叶斯(Naive Bayes)是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法。本文可能是目前网络上最全面也最简单易懂的有关朴素贝叶斯的文章。

    挖掘大数据
  • 饿了么推荐系统:从0到1

    用户1737318
  • Socket基本-TCP粘包问题

    Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架 提供完整的解决方案 优点很多也就不说了, 但是有个缺点必须要求客户端调用采用thr...

    程序员小王
  • 优化网站性能必备的6种架构方案,你知道吗?

    一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能...

    lyb-geek

扫码关注云+社区

领取腾讯云代金券