HTTP消息头

HTTP 消息头

HTTP 请求头提供请求或答复的所需信息,或者表示关于消息正文中发送的对象. 一共有四种请求头类型:

  • General-header: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头.
  • Client Request-header: 这些标头字段仅适用于请求消息.
  • Server Response-header: 这些标头字段仅适用于响应消息.
  • Entity-header: 这些标头字段定义有关实体主体的元信息,如果没有主体,则定义有关请求标识的资源的元信息.

General Headers

Cache-Control

Cache-Control 请求头字段用于指定所有缓存系统必须遵守的指令。语法如下:

Cache-Control : cache-request-directive|cache-response-directive

HTTP 客户端或服务器可以使用 Cache-control 来指定缓存参数或从缓存中请求某些类型的文档。缓存指令在逗号分隔的列表中指定。例如:

Cache-control: no-cache

下表列出了客户端可以在其 HTTP 请求中使用的重要缓存请求指令:

S.N. Cache Request 指令和说明
1 no-cache 未经原始服务器的重新验证,缓存不得响应满足后续请求。
2 no-store 缓存不能存储有关客户端请求或服务器响应的任何内容.
3 max-age = seconds 表示客户端愿意接受其年龄不超过指定时间(以秒为单位)的响应.
4 max-stale [= seconds]表示客户端愿意接受超过其到期时间的响应。如果指定了秒数,那么它的到期时间不得超过该时间.
5 min-fresh = seconds 表示客户端希望获取一个能在指定的秒数内保持其最新状态的响应。.
6 no-transform 不得对资源进行转换或转变。Content-Encoding、Content-Range、Content-Type 等 HTTP 头不能由代理修改。例如,非透明代理或者如 Google‘s Light Mode 可能对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。no-transform 指令不允许这样做.
7 only-if-cached 表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝。.

The following important cache response directives that can be used by the server in its HTTP response:

S.N. Cache Response 指令和说明
1 public 表示响应可能被任何人缓存
2 private 指示全部或部分响应消息是针对单个用户的,并且不能由共享的用户缓存 cache.
3 no-cache 未经原始服务器成功重新验证,缓存不得响应满足后续请求.
4 no-store 缓存不应存储有关客户端请求或服务器响应的任何内容.
5 no-transform 不转换实体.
6 must-revalidate 缓存必须在使用之前验证过时文档的状态,并且不应使用过期的文档.
7 proxy-revalidate 与 must-revalidate 作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略.
8 max-age = seconds 表示客户端愿意接受其不超过指定时间(以秒为单位)的响应.
9 s-maxage = seconds 表示客户端愿意接受其年龄不超过指定时间(以秒为单位)的响应,但是仅适用于共享缓存(比如各个代理),私有缓存会忽略它.

Connection

Connection 字段允许发送方指定该特定连接所需的选项,并且代理不能通过其他连接传达这些选项。以下是使用连接头的简单语法:

Connection : "Connection"

HTTP / 1.1 为发送者定义了“关闭”连接选项,以指示响应完成后将关闭连接。例如:

Connection: close

默认情况下,HTTP 1.1 使用持久连接,该连接在事务处理后不会自动关闭。另一方面,默认情况下,HTTP 1.0 没有持久连接。如果 1.0 客户端希望使用持久连接,则使用 keep-alive 参数,如下所示:

Connection: keep-alive

Date

所有 HTTP 日期/时间戳都必须毫无例外地以格林威治标准时间(GMT)表示。允许 HTTP 应用程序使用日期/时间戳的以下三种表示形式中的任何一种:

Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov  6 08:49:37 1994       ; ANSI C‘s asctime() format

第一种格式是最优选的格式。

Pragma

Pragma 字段用于包含特定指令的实现,这些指令可能适用于请求/响应链中的任何接收者。例如:

Pragma: no-cache

HTTP / 1.0 中定义的唯一指令是 no-cache 指令,并在 HTTP 1.1 中进行维护以实现向后兼容。将来不会定义新的 Pragma 指令。

Trailer

Trailer 字段允许发送方在分块发送的消息后面添加额外的元信息,这些元信息可能是随着消息主体的发送动态生成的,比如消息的完整性校验,消息的数字签名,或者消息经过处理之后的最终状态等。

Trailer : field-name

出现在分块信息挂载部分的消息首部。以下首部字段不允许出现:

  • 用于信息分帧的首部 (例如 Transfer-Encoding 和 Content-Length),
  • 用于路由用途的首部 (例如 Host),
  • 请求修饰首部 (例如控制类和条件类的,如 Cache-Control,Max-Forwards,或者 TE),
  • 身份验证首部 (例如 Authorization 或者 Set-Cookie),
  • Content-Encoding, Content-Type, Content-Range,以及 Trailer 自身。

Transfer-Encoding

Transfer-Encoding 消息首部指明了将 entity 安全传递给用户所采用的编码形式。
Transfer-Encoding 是一个逐跳传输消息首部,即仅应用于两个节点之间的消息传递,而不是所请求的资源本身。一个多节点连接中的每一段都可以应用不同的 Transfer-Encoding 值。如果你想要将压缩后的数据应用于整个连接,那么请使用端到端传输消息请求头 Content-Encoding 。

Transfer-Encoding: chunked

所有传输编码值都不区分大小写。

Upgrade

Upgrade 允许客户端指定其支持的其他通信协议并在服务器认为适合切换协议时优先使用. 例如:

Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

Upgrade 旨在提供一种从 HTTP / 1.1 过渡到其他不兼容协议的简单机制。

Via

网关和代理必须使用 Via 来指示中间协议和收件人. 例如,可以将请求消息从 HTTP / 1.0 用户代理发送到名为“ fred”的内部代理,该代理使用 HTTP / 1.1 将请求转发到 nowhere.com 上的公共代理,从而完成请求通过将其转发到位于www.ics.uci.edu的原始服务器。 www.ics.uci.edu收到的请求将具有以下Via标头字段:

Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Upgrade 旨在提供一种从 HTTP / 1.1 过渡到其他不兼容协议的简单机制。

Warning

Warning 用于承载有关状态消息或转换信息,这些信息可能未反映在消息中。一个响应可能包含多个警告标头。

Warning : warn-code SP warn-agent SP warn-text SP warn-date

Client Request Headers

Accept

Accept 可用于某些特定的对响应方可接受的媒体类型。通用语法如下:

Accept: type/subtype [q=qvalue]

可以列出多个用逗号分隔的媒体类型,可选的 qvalue 表示可接受类型的可接受质量等级,范围为 0 到 1。以下是一个示例:

Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c

这将被解释为 text / htmltext / xc是首选的媒体类型,但是如果它们不存在,则发送text / x-dvi实体,如果如果不存在,则发送text / plain实体。

Accept-Charset

Accept-Charset 可以用来指示响应可接受的字符集。以下是一般语法:

Accept-Charset: character_set [q=qvalue]
可以列出多个字符集,以逗号隔开,可选的 qvalue 表示非首选字符集的可接受质量等级,范围为 0 到 1。以下是一个示例:

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

特殊值“ \ *”(如果出现在** Accept-Charset 字段中)与每个字符集匹配,并且如果不存在 Accept-Charset **头,则默认为任何字符集都是可接受的。

Accept-Encoding

Accept-Encoding 与“Accept”相似,但限制了响应中可接受的内容编码。通用语法为:

Accept-Encoding: encoding types
示例如下:

Accept-Encoding: compress, gzip
Accept-Encoding:
Accept-Encoding: \*
Accept-Encoding: compress;q=0.5, gzip;q=1.0
Accept-Encoding: gzip;q=1.0, identity; q=0.5, \*;q=0

Accept-Language

Accept-Language 与“Accept”相似,但限制了优先用于响应请求的自然语言集。通用语法为:

Accept-Language: language [q=qvalue]

可以列出多种语言,以逗号分隔,可选的 qvalue 表示非首选语言的可接受质量等级,范围为 0 到 1。以下是一个示例:

Accept-Language: da, en-gb;q=0.8, en;q=0.7

Authorization

Authorization 值由凭证组成,凭证包含用于所请求资源领域的用户代理的认证信息。通用语法为:

Authorization : credentials

HTTP / 1.0 规范定义了 BASIC 授权方案,其中授权参数是以 base 64 编码的username:password字符串。以下是一个示例:

Authorization: BASIC Z3Vlc3Q6Z3Vlc3QxMjM=

解码为的值是guest:guest123,其中guest 是用户 ID,而 guest123 **是密码。

Cookie

Cookie 包含为该 URL 存储的名称/值信息对。以下是一般语法:

Cookie: name=value

可以指定多个 cookie,并用分号隔开,如下所示:

Cookie: name1=value1;name2=value2;name3=value3

Expect

表示服务器只有在满足此期望条件的情况下才能妥善地处理请求。

Expect : 100-continue | expectation-extension

如果服务器收到的请求包含包含不支持的期望扩展名的 Expect 字段,则服务器必须以 417(期望失败)状态进行响应。

From

From 包含用于控制请求用户代理的人工用户的 Internet 电子邮件地址。以下是一个简单的示例:

From: webmaster@w3.org

该头字段可以用于登入目的,并且可以用作鉴别不想要或者不合规请求的手段。

Host

Host 用于指定 Internet 主机和所请求资源的端口号。通用语法为:

Host : "Host" ":" host [ ":" port ] ;

没有任何尾随端口信息的主机表示默认端口为 80。例如,原始服务器上对http://www.w3.org/pub/WWW/的请求为:

GET /pub/WWW/ HTTP/1.1
Host: www.w3.org

If-Match

If-Match 与方法一起使用,它是方法执行的条件。仅当此标记中的给定值与ETag表示的给定实体标记匹配时,此标头才请求服务器执行请求的方法。通用语法为:

If-Match : entity-tag

星号(*)与任何实体匹配,并且仅当该实体存在时交换才继续。以下是可能的示例:

If-Match: "xyzzy"
If-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-Match: *

如果没有任何实体标记匹配,或者给出了“ *”并且不存在当前实体,则服务器不得执行请求的方法,并且必须返回 412(失败的前提条件)响应。

If-Modified-Since

If-Modified-Since 与方法一起使用,它是方法执行的条件。如果自此字段中指定的时间以来未修改请求的 URL,则不会从服务器返回实体;相反,将返回 304(未修改)响应,而没有任何消息正文。 if-modified-since 的一般语法为:

If-Modified-Since : HTTP-date

该字段的示例是:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

如果没有任何实体标记匹配,或者给出了“ *”并且不存在当前实体,则服务器不得执行请求的方法,并且必须返回 412(失败的前提条件)响应。

If-None-Match

If-None-Match 与方法一起使用,它是方法执行的条件。仅当此标记中给定值之一与ETag表示的给定实体标记匹配时,此标头才请求服务器执行请求的方法。通用语法为:

If-None-Match : entity-tag

星号(\ *)与任何实体匹配,并且仅当该实体不存在时交易才继续。以下是可能的示例:

If-None-Match: "xyzzy"
If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
If-None-Match: *

If-Range

if-Range 可以与条件 GET 一起使用,如果尚未更改,仅请求缺少的实体部分,如果已更改则请求整个实体。通用语法如下:

If-Range : entity-tag | HTTP-date

实体标签或日期均可用于标识已接收的部分实体。例如:

If-Range: Sat, 29 Oct 1994 19:43:31 GMT

如果自给定日期以来未对文档进行过修改,则服务器将返回 Range 标头给出的字节范围,否则它将返回所有新文档。

If-Unmodified-Since

If-Unmodified-Since 与方法一起使用,它是方法执行的条件。通用语法为:

If-Unmodified-Since : HTTP-date

如果自此字段中指定的时间以来尚未修改请求的资源,则服务器应执行请求的操作,就像不存在 If-Unmodified-Since 标头一样。例如:

If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT

如果请求的结果不是 2xx 或 412 状态,则 If-Unmodified-Since 标头应被忽略。

Max-Forwards

Max-Forwards 提供一种用 TRACE 和 OPTIONS 方法限制可以将请求转发到下一个入站服务器的代理或网关的数量的机制。以下是一般语法:

Max-Forwards : n

Max-Forwards 值是一个十进制整数,指示可以转发此请求消息的剩余次数。这对于使用 TRACE 方法进行调试很有用,可避免无限循环。例如:

Max-Forwards : 5

Max-Forwards 对于 HTTP 规范中定义的所有其他方法,可以忽略。

Proxy-Authorization

代理授权允许客户端向需要身份验证的代理标识自己(或其用户)。以下是一般语法:

Proxy-Authorization : credentials

Proxy-Authorization 由凭证组成,凭证包含用于所请求资源的代理和/或领域的用户代理的认证信息。

Range

Range 指定从文档请求的内容的范围。通用语法为:

Range: bytes-unit=first-byte-pos "-" [last-byte-pos]

指定的字节位置包括在内。您可以将字节单位指定为字节。字节偏移量从零开始。一些简单的示例如下:

- The first 500 bytes
Range: bytes=0-499

- The second 500 bytes
Range: bytes=500-999

- The final 500 bytes
Range: bytes=-500

- The first and last bytes only
Range: bytes=0-0,-1

可以列出多个范围,以逗号分隔。如果缺少逗号分隔的字节范围内的第一个数字,则假定该范围从文档末尾开始计数。如果缺少第二个数字,则范围是字节 n 到文档末尾。

Referer

Referer 允许客户端指定从中请求 URL 的资源的地址(URI)。通用语法如下:

Referer : absoluteURI | relativeURI

以下是一个简单的示例:

Referer: http://www.tutorialspoint.org/http/index.htm

如果字段值是相对 URI,则应相对于 Request-URI 进行解释。

TE

TE 请求型头部用来指定用户代理希望使用的传输编码类型。(可以将其非正式称为 Accept-Transfer-Encoding, 这个名称显得更直观一些)。 以下是一般语法:

TE : t-codings

关键字“ trailers”的存在表明客户端愿意以分块的传输编码方式接受尾部字段,并且通过以下两种方式之一进行指定:

TE: deflate
TE:
TE: trailers, deflate;q=0.5

如果 TE 字段值为空或不存在 TE 字段,则仅传输编码为 chunked。没有传输编码的消息总是可以接受的。

User-Agent

User-Agent 包含有关发起请求的用户代理的信息。以下是一般语法:

User-Agent : product | comment

例子:

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)

Server Response Headers

Accept-Ranges

Accept-Ranges 允许服务器指示其接受资源的范围请求。通用语法为:

Accept-Ranges : range-unit | none

例如,接受字节范围请求的服务器可以发送:

Accept-Ranges: bytes

不接受任何类型的资源范围请求的服务器可以发送:

Accept-Ranges: none

这将建议客户端不要尝试范围请求。

Age

Age 传达了发件人对自始端服务器生成响应(或其响应)以来的时间量的估计。通用语法为:

Age : delta-seconds

Age 值是非负十进制整数,以秒为单位表示时间。以下是一个简单的示例:

Age: 1030

包含缓存的 HTTP / 1.1 服务器必须在其自己的缓存生成的每个响应中都包含 Age 标头字段。

ETag

ETag 提供所请求变体的实体标签的当前值。通用语法为:

ETag : entity-tag

以下是一些简单的示例:

ETag: "xyzzy"
ETag: W/"xyzzy"
ETag: ""

Location

Location 用于将收件人重定向到 Request-URI 以外的其他位置以完成操作。通用语法为:

Location : absoluteURI

以下是一个简单的示例:

Location: http://www.tutorialspoint.org/http/index.htm

Content-Location 标头字段与 Location 的不同之处在于 Content-Location 标识请求中包含的实体的原始位置。

Proxy-Authenticate

Proxy-Authenticate 是一个响应首部,指定了获取 proxy server (代理服务器)上的资源访问权限而采用的身份验证方式。代理服务器对请求进行验证,以便它进一步传递请求。Proxy-Authenticate 首部需要与 407 Proxy Authentication Required 响应一起发送。

Proxy-Authenticate : challenge

Retry-After

Retry-After 可以与 503(服务不可用)响应一起使用,以指示请求客户端不希望使用该服务多长时间。通用语法为:

Retry-After : HTTP-date | delta-seconds

例子:

Retry-After: Fri, 31 Dec 1999 23:59:59 GMT
Retry-After: 120

在后一个示例中,延迟为 2 分钟。

Server

服务器包含有关原始服务器用来处理请求的软件的信息。通用语法为:

Server : product | comment

以下是一个简单的示例:

Server: Apache/2.2.14 (Win32)

如果响应是通过代理转发的,则代理应用程序不得修改服务器响应头。

Set-Cookie

Set-Cookie 包含一个名称/值信息对,用于此 URL。通用语法为:

Set-Cookie: NAME=VALUE; OPTIONS

Set-Cookie 响应标头包含令牌 Set-Cookie,后跟一个或多个 Cookie 的逗号分隔列表。以下是可以指定为选项的可能值:

S.N. Options and Description
1 Comment=comment 此选项可用于指定与 cookie 相关的任何注释。
2 Domain=domain 域属性指定 cookie 对其有效的域。
3 Expires=Date-time Cookie 到期的日期。如果为空,则 cookie 将在访问者退出浏览器时过期。
4 Path=path Path 属性指定此 Cookie 应用于的 URL 的子集。
5 Secure 它指示用户代理仅在安全连接下返回 cookie。

以下是服务器生成的简单 Cookie 标头的示例:

Set-Cookie: name1=value1,name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT

Vary

Vary 指定实体具有多个源,因此可能因指定的请求标头列表而异。以下是常规语法:

Vary : field-name

您可以指定多个按逗号分隔的标头和星号 "
" 的值,表示未指定的参数不限于请求标头。以下是一个简单的示例:

Vary: Accept-Language, Accept-Encoding

此处字段名称不区分大小写。

WWW-Authenticate

401(未授权)响应消息中必须包含 WWW-Authenticate。字段值由至少一个质询组成,该质询指示适用于请求 URI 的身份验证方案和参数。一般语法是:

WWW-Authenticate : challenge

WWW- Authenticate 可能包含多个质询,或者如果提供了多个WWW- Authenticate,则质询本身的内容可以包含身份验证参数的逗号分隔列表。以下是一个简单的示例:

WWW-Authenticate: BASIC realm="Admin"

Entity Headers

Allow

Allow列出请求 URI 标识的资源支持的方法集。一般语法是:

Allow : Method

您可以指定用逗号分隔的多个方法。以下是一个简单的示例:

Allow: GET, HEAD, PUT

此字段无法阻止客户端尝试其他方法。

Content-Encoding

Content-Encoding用作介质类型的修改器。一般语法是:

Content-Encoding : content-coding

content-coding用于对特定媒体类型的数据进行压缩。当这个首部出现的时候,它的值表示消息主体进行了何种方式的内容编码转换。这个消息首部用来告知客户端应该怎样解码才能获取在 Content-Type 中标示的媒体类型内容。。以下是一个简单的示例:

Content-Encoding: gzip

如果源服务器不能接受请求消息中实体的内容编码,则服务器应响应状态代码为 415(不支持的媒体类型)。

Content-Language

Content-Language 描述封闭实体的预期受众的自然语言。以下是常规语法:

Content-Language : language-tag

对于面向多个受众的内容,可能会列出多种语言。以下是一个简单的示例:

Content-Language: mi, en

内容语言的主要目的是允许用户根据用户自己的首选语言识别和区分实体。

Content-Length

Content-Length 表示实体体的大小,以十进制数字表示,发送到收件人,或者,在 HEAD 方法中,如果请求是 GET,则表示将发送的实体体的大小。一般语法是:

Content-Length : DIGITS

以下是一个简单的示例:

Content-Length: 3495

大于或等于零的任何内容长度都是有效值。

Content-Location

当该实体可从独立于请求的资源的 URI 的位置访问时,可以使用"Content-Location"实体标头字段为消息中包含的实体提供资源位置。一般语法是:

Content-Location: absoluteURI | relativeURI

例子:

Content-Location: http://www.tutorialspoint.org/http/index.htm

内容位置的值还定义实体的基URI。

Content-MD5
Content-MD5 可用于提供实体的 MD5 摘要,用于在收到邮件时检查消息的完整性。一般语法是:

Content-MD5 : md5-digest using base64 of 128 bit MD5 digest as per RFC 1864

例子:

Content-MD5 : 8c2d46911f3f5a326455f0ed7a8ed3b3

MD5 摘要是根据实体体的内容计算的,包括已应用的任何内容编码,但不包括应用于消息正文的任何传输编码。

Content-Range

在HTTP协议中,响应首部 Content-Range 显示的是一个数据片段在整个文件中的位置:

Content-Range : bytes-unit SP first-byte-pos "-" last-byte-pos

字节内容范围规格值的示例,假设实体总共包含 1234 个字节:

- The first 500 bytes:
Content-Range : bytes 0-499/1234

- The second 500 bytes:
Content-Range : bytes 500-999/1234

- All except for the first 500 bytes:
Content-Range : bytes 500-1233/1234

- The last 500 bytes:
Content-Range : bytes 734-1233/1234

当 HTTP 消息包含单个范围的内容时,此内容将和显示实际传输字节数的Content-Length标头一起使用。例如,

HTTP/1.1 206 Partial content
Date: Wed, 15 Nov 1995 06:25:24 GMT
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
Content-Range: bytes 21010-47021/47022
Content-Length: 26012
Content-Type: image/gif

Content-Type

Content-Type 表示发送到收件人的实体主体的媒体类型,或者,在 HEAD 方法中,如果请求是 GET,则将发送的媒体类型。一般语法是:

Content-Type : media-type

例子:

Content-Type: text/html; charset=ISO-8859-4

Expires

Expires 给出日期/时间,之后响应被视为过时。一般语法是

Expires : HTTP-date

例子:

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Last-Modified

Last-Modified 指示源服务器认为上次修改变体的日期和时间。一般语法是:

Last-Modified: HTTP-date

例子:

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

HTTP消息头

上一篇:Web开发基础之Django


下一篇:http/https 的区别