HTTP - Header 标头字段

HTTP 标头字段提供有关请求或响应或有关消息正文中发送的对象的必需信息。 HTTP 消息头有四种类型:

  • General-header(常规标题):这些标头字段对请求和响应消息具有普遍适用性。

  • Client Request-header(客户端请求标头):这些标头字段仅适用于请求消息。

  • Server Response-header(服务器响应标头):这些标头字段仅适用于响应消息。

  • Entity-header(实体标头):这些标头字段定义有关实体主体的元信息,或者如果不存在主体,则定义有关请求标识的资源的元信息。

General-header(常规标题)

Cache-Control(缓存控制)

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

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

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

Cache-control: no-cache

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

S.N. 缓存请求指令和描述
1 no-cache

在未成功与源服务器进行重新验证的情况下,缓存不得使用响应来满足后续请求。

2 no-store

缓存不应存储有关客户端请求或服务器响应的任何内容。

3 max-age = seconds

表示客户端愿意接受年龄不大于指定时间(以秒为单位)的响应。

4 max-stale [ = seconds ]

表示客户端愿意接受超过过期时间的响应。 如果指定了秒数,则过期时间不得超过该时间。

5 min-fresh = seconds

表示客户端愿意接受新鲜度生命周期不小于其当前年龄加上指定时间(以秒为单位)的响应。

6 no-transform

不转换实体主体。

7 only-if-cached

不检索新数据。 仅当文档在缓存中时,缓存才能发送该文档,并且不应联系源服务器以查看是否存在较新的副本。

服务器可以在其 HTTP 响应中使用以下重要的缓存响应指令:

S.N. 缓存响应指令和描述
1 public

表示响应可以被任何缓存缓存。

2 private

表示全部或部分响应消息适用于单个用户,不得由共享缓存进行缓存。

3 no-cache

在未成功与源服务器重新验证的情况下,缓存不得使用响应来满足后续请求。

4 no-store

缓存不应存储有关客户端请求或服务器响应的任何内容。

5 no-transform

不转换实体主体。

6 must-revalidate

缓存在使用之前必须验证过时文档的状态,并且不应使用过期的文档。

7 proxy-revalidate

proxy-revalidate 指令与 Must-revalidate 指令具有相同的含义,只是它不适用于非共享用户代理缓存。

8 max-age = seconds

表示客户端愿意接受年龄不大于指定时间(以秒为单位)的响应。

9 s-maxage = seconds

此指令指定的最大期限会覆盖 max-age 指令或 Expires 标头指定的最大期限。 s-maxage 指令始终被私有缓存忽略。

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 标头字段的语法:

Trailer : field-name

Trailer 标头字段中列出的消息标头字段不得包含以下标头字段:

  • Transfer-Encoding

  • Content-Length

  • Trailer

Transfer-Encoding

传输编码通用标头字段指示已对消息正文应用什么类型的转换,以便在发送者和接收者之间安全地传输消息。 这与内容编码不同,因为传输编码是消息的属性,而不是实体主体的属性。 Transfer-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

客户端请求标头

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/x-c 并且是首选媒体类型,但如果它们不存在,则发送 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编码的用户名:密码字符串。下面是一个示例:

Authorization: BASIC Z3Vlc3Q6Z3Vlc3QxMjM=

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

Cookie

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

Cookie: name=value

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

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

Expect

Expect 请求标头字段用于指示客户端需要一组特定的服务器行为。 一般语法为:

Expect : 100-continue | expectation-extension

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

From

From 请求标头字段包含控制请求用户代理的人类用户的 Internet 电子邮件地址。 下面是一个简单的例子:

From: webmaster@w3.org

此标头字段可用于记录目的,并作为识别无效或不需要的请求来源的方法。

Host

Host请求标头字段用于指定所请求资源的互联网主机和端口号。 一般语法为:

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

没有任何尾随端口信息的Host意味着默认端口,即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

对于 HTTP 规范中定义的所有其他方法,Max-Forwards 标头字段可能会被忽略。

Proxy-Authorization

Proxy-Authorization 请求标头字段允许客户端向需要身份验证的代理标识自己(或其用户)。 这是一般语法:

Proxy-Authorization : credentials

Proxy-Authorization 字段值由凭证组成,凭证包含代理和/或所请求资源领域的用户代理的身份验证信息。

Range

Range请求标头字段指定从文档请求的内容的部分范围。 一般语法为:

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

字节范围规范中的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请求头字段指示它愿意在响应中接受什么扩展transfer-coding以及它是否愿意接受分块transfer-coding中的尾部字段。 以下是一般语法:

TE   : t-codings

关键字"trailers"的存在表明客户端愿意接受分块传输编码中的预告片字段,并且可以通过以下任一方式指定:

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

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

User-Agent

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

User-Agent : product | comment

Example:

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

服务器响应标头

Accept-Ranges

Accept-Ranges响应标头字段允许服务器指示其接受资源的范围请求。 一般语法为:

Accept-Ranges  : range-unit | none

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

Accept-Ranges: bytes

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

Accept-Ranges: none

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

Age

Age 响应标头字段传达发送者对自源服务器生成响应(或其重新验证)以来的时间量的估计。 一般语法为:

Age : delta-seconds

年龄值是非负十进制整数,表示时间(以秒为单位)。 下面是一个简单的例子:

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 响应标头字段必须包含在 407(需要代理身份验证)响应中。 一般语法为:

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 响应标头字段包含有关源服务器用来处理请求的软件的信息。 一般语法为:

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. 选项和说明
1 Comment=comment

此选项可用于指定与 cookie 关联的任何注释。

2 Domain=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

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

WWW-Authenticate : challenge

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

WWW-Authenticate: BASIC realm="Admin"

实体标头

Allow

Allow 实体标头字段列出了请求 URI 标识的资源支持的方法集。 一般语法为:

Allow : Method

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

Allow: GET, HEAD, PUT

该字段不能阻止客户端尝试其他方法。

Content-Encoding

Content-Encoding实体标头字段用作媒体类型的修饰符。 一般语法为:

Content-Encoding : content-coding

内容编码是由Request-URI 标识的实体的特征。 下面是一个简单的例子:

Content-Encoding: gzip

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

Content-Language

Content-Language实体标头字段描述了所包含实体的目标受众的自然语言。 以下是一般语法:

Content-Language : language-tag

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

Content-Language: mi, en

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

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

Content-Location 的值还定义实体的基本 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

Content-Range 实体标头字段与部分实体主体一起发送,以指定应在完整实体主体中的何处应用部分主体。 一般语法为:

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

byte-content-range-spec 值的示例,假设实体总共包含 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-Range 标头和显示实际传输字节数的 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