HTTP HTTP报文首部

http 报文首部 http请求报文

报文首部 请求行、请求首部字段、通用报文字段、实体报文字段

空行 空行(CR+LF)

报文主体 报文主体

http响应报文

状态行、请求首部字段、通用报文字段、实体报文字段

空行(CR+LF)

报文主体

请求行:方法、URI、HTTP版本

状态行:HTTP版本、状态码

http首部字段:通用首部字段、请求首部字段、响应首部字段、实体首部字段

一.通用首部字段

1.1Cache-Control:缓存请求指令
no-cache:强制向源服务器再次验证(为了防止从缓存中返回过期的资源,不会接收过期的响应)
no-store:不缓存请求或响应的内容
max-age = [秒]响应的最大Age值(缓存时间数值比指定数值更小,那么客户端就接收缓存的资源,当指定的max-age为0时,那么缓存服务器通常需要将请求转发给源服务器)
max-stale = ([秒])接收已过期的响应(即使资源过期也照常接收,如果指令为指定参数值,那么无论经过多久,客户端都会接收响应;如果指令中指定了具体数值,那么即使过期,只要仍处于max-stale指定的时间内,仍旧会被客户端接收)
min-fresh =[秒]期望在指定时间内的响应仍有效(指令要求缓存服务器返回至少还未指定时间的缓存资源;如果为60秒,60秒后如果超过有效期限的资源都无法作为响应返回)
no-translation:代理不可更改媒体类型(防止缓存或代理压缩图片等类似操作)
only-if-cached:从缓存获取资源(要求缓存服务器不重新加载响应,也不会再次确认资源有效性)
cache-extension:新指令标记(可以扩展Cache-Control首部字段内的指令,如果缓存服务器不能理解新增指令,可以就此忽略)
1.2Cache-Control:缓存响应指令
public:可向任意方提供响应缓存
private:仅向特定用户返回响应(对于其他用户发过来的请求,代理服务器不会返回缓存)
no-cache:缓存前必须先确认缓存的有效性(缓存服务器不能对资源进行缓存;no-cache=Location,客户端在接收这个被指定参数值的首部字段对应的响应报文后,就不能使用缓存。无参数值的首部字段可以使用缓存)
no-store:不缓存请求或响应的任何内容(暗示请求或中包含机密信息)
no-transform:代理不可更改媒体类型
must-revalidate:可缓存但必须再向源服务器确认(代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效)
proxy-revalidate:要求中间缓存服务器对缓存的响应有效性再进行确认(要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性)
max-age = [秒]响应的最大Age值(max-age数值代表源资源保存为缓存的最长时间)(1.1版本先处理max-age,忽略expires;1.0先处理expires,忽略max-age)
s-maxage = [秒]公共缓存服务器响应的最大Age值(只适用公共缓存服务器,也就是说,对于向同一用户重复返回响应的服务器来说,这个指令没有任何作用,使用s-maxage指令后,忽略max-age的处理)
cache-extension:新指令标记
2.Connection
控制不再转发给代理的首部字段 Connection:不再转发的首部字段名
管理持久连接 Connection: close 1.1版本默认连接都是持久连接 1.1之前是非持久
3.Date:创建HTTP报文的日期和时间
4.Pragma:不返回缓存的资源

http/1.1之前版本的历史遗留字段,客户端会要求所有中间服务器不返回缓存的资源。

5.Trailer:报文末端的首部一览
6.Transfer-Encoding

规定了传输报文主体时采用的编码方式 HTTP/1.1的传输编码方式仅对分块传输编码有效

7.Upgrade

用于检测HTTP协议以及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。Upgrade首部字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间。因此,使用首部字段Upgrade时,还需要额外指定Connection:Upgrade

8.Via

追踪客户端与服务器之间的请求和响应报文的传输路径

9.Warning

告知用户一些缓存相关的问题的警告

warning:警告码 警告的主机:端口号 ”警告内容“ (日期时间)

110 Response is stale 响应已过期 代理返回已过期的资源

111 Revalidation failed 再验证失败(代理再验证资源有效性时失效)

112 Disconnection operation 断开连接操作(代理与互联网连接被故意切断)

113 Heuristic expiration 试探性过期(响应的使用期超过X小时)

199 Miscellaneous warning 杂项警告(任意警告的内容)

214 Transformation applied 使用了转换(代理对内容编码或媒体类型等执行处理时)

299 Miscellaneous persistent warning 持久杂项警告(任意警告的内容)

二.请求首部字段

请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信心、对响应内容的优先级等内容。

优先级

权值q= ; [0~1] (可精确到小数点后三位) 1为最大值

1.Accept

用户代理能够处理的媒体类型及媒体类型的相对优先级。

文本文件

text/html,text/plain,text/css...

application/xthml+xml,application/xml...

图片文件

image/jpeg,image/gif,image/png...

视频文件

video/mpeg,video/quicktime...

应用程序使用的二进制文件

application/octet-stream,application/zip...

2.Accept-Charset

用来通知服务器用户代理支持的字符集及字符集的相对优先顺序

3.Accept-Encoding

用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序

gzip:由文件压缩程序生成的编码格式

compress:有UNIX文件压缩程序生成的编码格式

deflate:组合使用zlib格式及由deflate压缩算法生成的编码格式

identity:不执行压缩或不会变化的默认编码格式

4.Accept-Language

用来告知服务器用户代理能够处理的自然语言集,以及自然语言集的相对优先级

5.Authorization

用户代理的认证信息

6.Except

期望出现的某种特定行为。因服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码417Exception Failed

7.From

用来告知服务器用户代理的用户电子邮件地址

8.Host

虚拟主机运行在同一个IP上,因此使用首部字段Host加以区分

告知服务器,请求资源所处的互联网主机名和端口号

9.If-Match

它会告知服务器匹配资源所用的实体(ETag)值,比对If-Match和ETag值,仅当两者一直时,才会执行请求

10.If-Modified-Since

如果在If-Modified-Since字段指定的日期时间后,资源发生了更新,服务器会接受请求

11.If-None-Match

只有在If-None-Match的字段值与ETag值不一致时,可处理该请求。与If-Match首部字段的作用相反

12.If-Range

If-Range字段值若是跟ETag值或更新的日期时间匹配一致,那么就作为范围请求处理

若不一致,则忽略范围请求,返回全部资源

如果不使用首部字段If-Range则需要进行两次处理

13.If-Unmodified-Since

指定的请求资源只有在字段值内指定日期时间之后,为发生更新的情况下,才能处理请求。

14.Max-Forwards

该字段数以十进制形式指定可经过的服务器最大数目

15.Proxy-Authorization

接收到从代理服务器发来的认证质问时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息。

这个行为是与客户端和服务器之间HTTP访问认证相类似的,不同之处在于 : 认证行为是发生在客户端与代理之间

16.Range

对于只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。

接收到附带Range首部字段请求对我服务器,会在处理请求之后返回状态码为206 Partial Content 的响应。无法处理该范围的请求时,则会返回状态码200 OK的响应及全部资源。

17.Referer

首部字段Referer会告知服务器请求的原始资源的URI

18.TE

会告知服务器客户端能够处理响应的传输编码方式及相对优先级。它和首部字段Accept-Encoding的功能很像,但是用于传输编码。

19.User-Agent

会将创建请求的浏览器和用户代理名称等信息传达给服务器

三.响应首部字段

用于补充响应的附加信息、服务器信息、以及对客户端的附加要求等信息

1.Accept-Ranges

当不能处理范围时,Accept-Ranges:none

可处理范围请求时指定为bytes,Accept-Ranges:bytes

用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源

2.Age

告知客户端,源服务器在多久之前创建了响应(Eg:这个缓存向源服务器确认过,现已过去了10分钟)

3.ETag

能告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。

当资源更新时,ETag值也需要更新

强ETag值

不论实体发生多么细微的变化都会改变其值

弱ETag值

弱ETag值只提示资源是否相同。只有资源发生了根本改变,产生差异时才会改变ETag值。这时,会在字段值最开始处附加W/

4.Location

可以将响应接收方引导至某个与请求URI位置的不同的资源

该字段会配合:3xx:Redirection的响应,提供重定向的URI

几乎所有的浏览器在接收到包含首部字段Location的响应之后,都会强制性地尝试对已提示的重定向资源的访问。

5.Proxy-Authenticate

它与客户端和服务器之间的HTTP访问认证的行为相似,不同之处在于其认证行为是在客户端与代理服务器之间进行的。

6.Retry-After

告知客户端应该在多久之后再次发送请求

客户端要配合状态码503 Service Unavailable响应,或3XX Redirect响应一起使用。

7.Server

告知客户端当前服务器上安装的HTTP服务器应用程序的信息。

8.Vary

当代理服务器接收到带有Vary首部字段指定获取资源的请求时,如果使用的Accept-Language字段的值相同,那么就直接从缓存返回响应。反之,则需要先从源服务器端获取资源后才能作为响应返回。

9.WWW-Authenticate

用于HTTP访问认证。它会告知客户端适用于访问请求URI所指定资源的认证方案和带参数的质询。

四.实体首部字段

用于补充内容的更新时间等与实体相关的信息

请求和响应两方的HTTP报文中都含有与实体相关的首部字段

1.Allow

用于通知客户端能够支持Request-URI指定资源的所有HTTP方法。当服务器接收到不支持的HTTP方法时,会以状态码405 Method Not Allowed 作为响应返回。于此同时,还会把所有能支持的HTTP方法写入首部字段Allow后返回。

2.Content-Encoding

会告知客户端对实体的主体部分选用的内容编码方式。内容编码方式是指在不丢失实体信息的前提下所进行压缩。

gzip compress deflate identity

3.Content-Language

首部字段Content-Language会告知客户端,实体主体使用的自然语言

4.Content-Length

表明了实体主体部分的大小

5.Content-Location

给出与报文主体相对应的URI。和首部字段Location不同,Content-Location表示的是报文主体返回资源对应的URI

6.Content-MD5

客户端会对接收的报文主体执行相同的MD5算法,然后与首部字段Content-MD5的字段值比较。

首部字段Content-MD5是一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。

由于HTTP首部无法记录二进制,所以要通过Based64编码处理。

为确保有效性,作为接收方的客户端会对报文主体再执行一次相同的MD5算法。计算出的值与字段值作比较之后,即可判断出报文主体的准确性。

采用这种方法,对内容上的偶发性改变是无从查证的,也无法检测出恶意篡改。其中一个原因在于,内容如果能够被篡改,那么同时意味着Content-MD5也可以重新计算然后被篡改。所以处在接受阶段的客户端是无法意识到报文主体以及首部字段Content-MD5是已经被篡改过的。

7.Content-Range

针对范围请求,返回响应时使用的首部字段Content-Range,能告知客户端作为响应返回的实体的哪个部分符合范围请求。

8.Content-Type

首部字段Content-Type说明了实体主体内对象的媒体类型。

9.Expires

首部字段Expires会将资源失效的日期告知客户端。缓存服务器在接收到含有首部字段Expires的响应后,会以缓存来应答请求,在Expires字段值指定的时间之前,响应的副本会一直保存。当超过指定的时间之后,缓存服务器在请求发送过来时,会转向源服务器请求资源。

10.Lsat-Modified

指明资源最终修改的时间。

猜你喜欢

转载自blog.csdn.net/qq_38362049/article/details/81000054