Java实现HTTP: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指令信息:

警告指令数字码描述符串具体描述
110Response is stale如果回复给客户端的数据来自缓存而且已经过了指定有效期那么就必须包含该指令
111Revalidation failed缓存服务器试图更新缓存信息但是失败了,因此只能返回已经过期的数据
112Disconnected operation当前缓存已经脱离了其他网络
113Heuristic expiration当缓存设定的有效期多余24个小时,而且超过了24小时候客户端请求该缓存时要发送该指令
199Miscellaneous warning该指令没有具体含义
214Transformation applied它警告接收方,缓存服务器对数据的格式进行了修改
299Miscellaneous 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, 客户端通过该指令要求服务器返回的信息必须在指定时间后修改过才能返回,它主要用于客户端检测所需数据是否更新以避免没有必要的数据传输。

其他两种类型的数据包头和相关指令将在后续章节进行解读。
更详细的讲解和代码调试演示过程,请点击链接

更多技术信息,包括操作系统,编译器,面试算法,机器学习,人工智能,请关照我的公众号:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值