网络安全实验室前端必备HTTP技能HTTP

HTTP 首部

2018-03-05  本文已影响37人  lazy_boy_coder

首部

通用首部字段

Cache-Control(控制缓存的行为)
no-cache
Cache-Control: no-cache

使用no-cache为了防止从缓存中返回过期的资源。缓存服务器会向源服务器进行有效期确认后处理资源。

no-store
Cache-Control: no-store

当使用no-store指令时,暗示请求和对应的响应中包含机密信息。因此,该指令规定缓存不能在本地存储请求或响应的任一部分。

s-maxage
Cache-Control: s-maxage=604800 (单位:秒)

表示处理公共代理服务器的情况下缓存过期没有超过指定的时间时,就会返回缓存。只适用于供多位用户使用的公共缓存服务器,对于同一个用户重复返回相应的服务器来说,这个指令没有任何作用。当使用 s-maxage指令后,则直接忽略对 Expires 首部字段及 max-age 指令的处理。

max-age
Cache-Control: max-age=604800(单位:秒)

缓存的最大有效时间,应用HTTP/1.1版本的缓存服务器遇到同时存在 Expires首部字段的情况时,会优先处理 max-age指令,而忽略掉 Expires首部字段,而HTTP/1.0刚好相反。如果,值为0时,表示代理服务器需要将请求转发给源服务器。

min-fresh
Cache-control: min-fresh=60(单位:秒)

要求缓存服务器返回未过指定时间的缓存资源。

max-stale
Cache-control: max-stale=3600(单位:秒)

使用 max-stale 可以指示缓存资源,即使过期也照常接收。如果,指令中,指定了具体的数值,那么即使过期,只要处于 max-stale指定时间内,仍旧会被客户端接收。

only-if-cached
Cache-control: only-if-cached

仅仅使用缓存,如果缓存服务器有指定缓存则返回,否则返回 504 Gateway Timeout。

must-revalidate
Cache-Control: must-revalidate

代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。must-revalidate指令会忽略掉 max-stale指令。

proxy-revalidate
Cache-Control: proxy-revalidate

要求所有的缓存服务器在接受到客户端带有该指令返回数据之前,必须再次验证缓存的有效性。

no-transform
Cache-Control: no-transform

无论是在请求还是在响应当中,缓存都不能改变实体主体的媒体类型。这样做可以防止缓存或代理压缩图片等类似操作。

Connection
控制不再转发给代理的首部字段
GET / HTTP/1.1
Upgrade: HTTP/1.1
Connection: Upgrade

如果中间有代理服务器,则经过代理服务器转发给源服务器的请求报文如下:

GET / HTTP/1.1
管理持久连接
Connection: close

HTTP/1.1 版本的默认连接都是持久连接,当服务器明确想断开连接时,则指定Connection的首部字段为 close。HTTP/1.1默认是打开的,而之前默认是关闭的。

Pragma
Pragma: no-cache

仅用在客户端发送请求的过程中,客户端要求所有的中间服务器不返回缓存的资源。Pragma 是 HTTP/1.1 之前版本的历史遗留字段,仅 作为与 HTTP/1.0 的向后兼容而定义

Date

表明创建HTTP报文的日期和时间

Date: Tue, 03 Jul 2012 04:40:59 GMT
Trailer

如果,报文采用了分块传输编码方式,就可以用这个首部列出位于报文

Transfer-Encoding

会事先说明在报文主体后记录了哪些首部字段,该首部字段可应用于HTTP/1.1 版本分块传输编码

Upgrade

用户检测HTTP协议及其其他协议是否可使用更高版本的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。

Via

为了追踪客户端与服务器之间的请求和响应报文的传输路径。
报文经过代理或者网关的时候,会先在首部字段Via中附加服务器信息,然后在进行转发。

Warning

HTTP/1.1 的 Warning 首部是从 HTTP/1.0 的响应首部(Retry-After)演变过来的,该首部通常会告知用户一些与缓存相关问题的警告。

请求首部字段

Accept

Accept 首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。

文本文件
text/html,text/plain,text/css
application/xhtml+xml,application/xml
图片文件
image/jpeg,image/gif,image/png
视频文件
video/mpeg,video/quicktime
应用程序中使用的二进制文件
application/octet-stream,application/zip

若要给显示的媒体类型增加优先级,则使用q=来额外表示权重值,用分号(;)进行间隔。权重q的范围是 0 ~ 1(可精确到小数点后3位),且1为最大值。不指定权重q值时,默认权重为 q=1.0。当服务器提供多种内容时,将会首先返回权重最高的媒体类型。

Accept-Charset
Accept-Charset: iso-8859-5,unicode-1-1;q=0.8

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

Accept-Encoding
Accept-Encoding: gzip,deflate

用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序,可一次指定多种内容编码。

压缩
gzip,compress,deflate
identity

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

Accept-Language
zh-Hans-US;q=1, en;q=0.9

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

Authorization
Authorization: Basic dWVub3NlbjpwYXNzd29yZA==

用来告知服务器,用户代理的认证信息值。

Expect
Expect: 100-continue

告知服务器,期望出现的某种特定的行为。

Form
Form: xxxxxxx@gmail.com

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

Host
Host: www.baidu.com

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

If-Match
If-Match: "123456"

服务器接收到,附带条件请求后,只有判断If-Match的字段值和资源ETag的值,仅当两者一致时,才会执行请求。

If-Modified-Since
 If-Modified-Since: Mon, 05 Mar 2018 08:03:31 GMT

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

If-Unmodified-Since

与If-Modified-Since 作用刚好相反。

If-None-Match
If-None-Match: *

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

If-Range
If-Range: "123456"

告知服务器若指定If-Range字段值和请求资源的ETag值或时间一致时,则作为范围请求处理。反之,则返回全体资源。

Max-Forwards
Max-Forwards: 10

每次转发数值减1,当数值变为0的时候返回响应。

Proxy-Authorization
Proxy-Authorization: Basic dGlwOjkpNLAGfFY5

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

Range
Range: bytes=5001-10000

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

Referer
Referer: http://www.jianshu.com/writer#/notebooks/21560928/notes/24474419/preview

会告知服务器请求的原始资源的URI。

TE
TE: gzip,deflate;q=0.5

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

User-Agent
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5

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

响应首部字段

Accept-Ranges
Accept-Ranges: none

首部字段用来告知客户端是否能处理范围请求,以指定获取服务器某个部分的资源。
可指定的范围有两种,可处理指定范围内的请求指定其为 bytes,反之则指定其为none。

Age
Age: 600 (单位:秒)

首部字段Age能告知客户端,源服务器在多久前创建了响应。若创建响应的服务器是缓存服务器,Age的值是指缓存后的响应到再次发起认证到认证完成的时间值,代理创建响应时必须加上首部字段Age。

ETag
ETag: "82e22293907ce725faf67773957acd12"

能告知客户端的实体标识,服务器会为每份资源分配对应的ETag值。

强 ETag 值:
不论实体发生多么细微的变化都会改变其值。
弱ETag值:
ETag的值只用于提示资源是否相同。只有资源发生根本的改变,产生的差异才会改变ETag值。这时,会在字段最开始处附加:

ETag: W/"usagi-1234"
Location
Location: https://www.baidu.com

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

Proxy-Authenticate
Proxy-Authenticate: Basic realm="Usagidesign Auth

会把代理服务器所要求的认证信息发送给客户端

Retry-After
Retry-After: 120(单位:秒)

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

Server
Server: Apache/2.2.17 (Unix)

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

Vary
Vary: Accept-Language

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

WWW-Authenticate
WWW-Authenticate: Basic realm="Usagidesign Auth"

用于HTTP的访问认证

实体首部字段

Allow
Allow:GET,HEAD

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

Content-Encoding
Content-Encoding: gzip

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

gzip
compress
deflate

不压缩:

identity
Content-Language
Content-Language: zh-CN

告知客户端,实体主体使用的自然语言

Content-Length
Content-Length: 15000

表明实体主体部分的大小(单位是字节)。

Content-Location
Content-Location: https://www.baidu.com

给出与报文主体相对应的URI。

Content-MD5
Content-MD5: OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY==

报文主体的MD5值。

Content-Range
Content-Range: bytes 5001-10000/10000

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

Content-Type
Content-Type: application/octet-stream

实体主体内对象的媒体类型

Expires
Expires: Wed, 04 Jul 2012 08:26:05 GMT

会将资源失效的日期告知客户端

Last-Modified
Last-Modified: Wed, 23 May 2012 09:59:55 GMT

指明资源的最终修改时间

上一篇下一篇

猜你喜欢

热点阅读