OKHTTP解析之HTTP首部基础知识

222 阅读7分钟

首先我们看一个http请求的头部信息样例:

image.png

可以看到请求头信息和 响应头信息,以及对应的头字段信息。 下面我们来回顾一下HTTP首部相关的信息,HTTP 首部分为HTTP通用首部,请求首部,响应首部以及实体首部。

1. HTTP 通用首部

通用首部提供了与报文相关的基本信息,不管是什么类型的报文,不管是请求报文或者响应报文,通用报文对这两种报文都是通用的。主要存在如下:

首部描述
Connection允许服务端和客户端指定与请求/响应 连接有关的选项
Date提供日期和事件标志,说明报文是什么时间创建的
MIME-Version给出发送端使用的MIME版本
Trailer如果报文是分块传输编码方式,则可以用这个首部列出报文拖挂部分的首部集合,事先说明在报文主体后记录了哪些首部字段
Transfer-Encoding规定报文主体的编码方式,告诉接受端,报文主主体的编码方式
Update给出了发送端可能想要升级使用的新版本或者协议
Via显示报文经过的中间节点(代理、网关)
Cache-Control通过指定它的指令,能操作缓存的工作机制
Pragma另一种随报文传输的指示方式,并不专用于缓存

2. HTTP 请求首部

请求首部只是在请求的报文中才有意义的首部。用于说明谁或者什么在发送请求,客户端有什么喜好,服务端会根据请求首部给出的客户端信息,试着为客户端提供更好的响应。

请求的信息性首部
首部描述
Client-IP提供了客户端的机器的IP地址
From提供了客户端用户的Email地址
Referer提供了包含了当前请求URL 的文档的URL
UA-Color提供了与客户端显示器的显示颜色有关的信息
UA-CPU提供了客户端CPU的类型或制造商
UA-Dsip提供了与客户端显示器(屏幕)能力有关的信息
UA-OS提供了与客户端机器上的操作系统名称及版本
UA-Pixels提供了客户端显示器的像素信息
User-Agent将发起请求的我应用程序名称告知服务器
Accept首部

Accept首部为客户端提供了一种将其喜好和能力告知服务器的方,这样服务器就可以根据这些额外信息发送最合适的内容。

首部描述
Accept告诉服务器能够发送哪些媒体类型
Accept-Charset告诉服务器能够发送哪些字符集
Accept-Encoding告诉服务器能够发送哪些编码方式
Accept-Lauguage告诉服务端能够发送哪些语言
TE告诉服务端可以使用哪些扩展传输编码
条件请求首部

有时候我们希望为请求加上一些限制。比如说,客户端已有有了一份文档,就希望只在服务器上的文档与客户端拥有的副本有所区别时,才请求服务器传输文档。

首部描述
Expect允许客户端列出某请求所要求的服务器行为
If-Match如果实体标记与文档当前的实体标记相匹配,就获取这份文档
If-Modified-Since除非在某个指定日期之后资源被修改过,否则就限制这个请求
If-None-Match如果提供的实体标记与当前文档的实体标记不相符,则获取当前文档
If-Range允许对文档的某个范围进行条件请求
If-Unmodified-Since除非在某个指定日期之后没有修改过,否则就限制这个请求
Range如果服务器支持请求范围,则请求资源的指定范围
安全请求首部

HTTP本身支持简单的机制,就是质询/响应认证。这种机制要在客户端获取特定资源前,先对自己进行认证,这样可以是事务稍微安全一点

首部描述
Authorization包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie客户端用它向服务器传送一个令牌,不是真正的安全首部,但确实隐含了安全功能
Cookie2用来说明请求端支持的cookie版本
代理请求首部
首部描述
Max-Forward在通往服务器的路径上,将请求转发给其他代理或网管的最大次数-与TRACE方法一起使用
Proxy-Authorization与Authorization首部相同,但这个首部是在于代理进行认证时使用的
Proxy-Connection与Connection 首部相同,但这个首部是与代理建立连接时使用的

3. HTTP 响应首部

响应报文的相应首部,为客户端提供了一些额外信息,比如谁在发送响应,响应者的功能,有助于更好的处理响应,将来更好的发起请求。

响应信息首部
首部描述
Age(从最初创建开始)响应持续时间
Public服务器为其资源支持的请求方法列表
Retry-After如果资源不可用的话,在这个日期或者时间重试
Server服务器应用程序的名称和版本
warning比原因短语更详细的警告报文
响应协商首部
首部描述
Accept-Ranges对此资源来说,服务器可接受的范围类型
Vary服务器查看的其他首部的列表,可能会是响应发生变化;也就是说,这是一个首部列表,服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端
安全响应首部
首部描述
Proxy-Authenticate来自代理的对客户端的咨询列表
Set-Cookie可以在客户单设置一个令牌,以便服务器对客户端进行标识
Set-Cookie2与Set-Cookie2类似
www-Authenticate来自服务端对客户端的咨询列表

4. HTTP 实体首部

用于描述请求和响应报文中的实体部分的首部。实体首部提供了有关实体和其内容的大量信息,从有关对象类型的信息,到能够对资源使用的各种有效的请求方法。

实体信息性首部
首部描述
Allow列出来可以对此实体执行的请求发
Location告知客户端实体实际上位于何处,用于将接收端定向到资源的位置URL上
实体内容首部

提供与实体内容相关的信息,包括类型,尺寸,以及处理他所需要的其他有用信息。

首部描述
Content-Base解析主体中的相对URL时使用的基础URL
Content-Encodeing对主体执行的任意编码方式
Content-Languauge理解主体时最适宜使用的自然语言
Content-Length主体的长度或者尺寸
Content-Location资源实际所处的位置
Content-MD5主体的MD5的校验和
Content-MD5在整个资源中此实体表示的字节范围
Content-Type这个主体的对象类型
实体缓存对象

说明实体什么时候以及如何进行缓存

首部描述
ETag与此实体相关的实体标记
Expires实体不在邮箱,要从原始的源端再次获取此实体的日期和时间
Last-Modified这个实体最后一次被修改的日期和时间