-

HTTP头域提供有关请求或响应的所需信息,或关于在消息正文中发送的对象。HTTP消息标头有四种类型:

总干事

缓存控制

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

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

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

Cache-control: no-cache

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

SN 缓存请求指令和描述
1 无缓存

缓存不能使用响应来满足后续请求,而不会使用原始服务器重新生效。

2 没有店

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

3 max-age = seconds

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

4 max-stale [= seconds]

表示客户端愿意接受超出其到期时间的响应。如果给出了秒数,则不能超过那段时间。

5 min-fresh =秒

表示客户端愿意接受其新鲜寿命不小于其当前年龄的响应,加上指定的时间(秒)。

6 无变换

不转换实体。

7 只有 - 如果缓存

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

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

SN 缓存响应指令和描述
1 public

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

2 private

表示全部或部分响应消息是针对单个用户,不能由共享缓存缓存。

3 无缓存

缓存不得使用响应来满足后续请求,而不会使用源服务器重新验证。

4 没有店

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

5 无变换

不转换实体。

6 必须重新验证

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

7 代理重新验证

proxy-revalidate伪指令与must-revalidate伪指令的含义相同,不同之处在于它不适用于非共享用户代理缓存。

8 max-age = seconds

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

9 s-maxage = seconds

此指令指定的最大年龄将覆盖由max-age指令或Expires头指定的最大年龄。s-maxage指令总是被私有缓存忽略。

连接

连接通用头字段允许发送方指定该特定连接所需的选项,并且不能由代理通过进一步的连接进行通信。以下是使用连接头的简单语法:

Connection : "Connection"

HTTP / 1.1定义了发送方的“关闭”连接选项,表示响应完成后连接将被关闭。例如:

Connection: close

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

Connection: keep-alive

日期

所有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

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

传输编码

传输编码通用头字段指示什么变换的类型已经被应用到所述消息体,以便将发送者和接收者之间安全地传递它。这与内容编码不同,因为传输编码是消息的属性,而不是实体。Transfer-Encoding标题字段的语法如下:

Transfer-Encoding: chunked

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

升级

升级常用头允许客户端指定它所支持的附加通信协议,并想如果服务器发现它适当的切换协议时使用。例如:

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

升级头域旨在提供从HTTP / 1.1转换到其他不兼容协议的简单机制。

通过

通过通用头必须由网关和代理被用于指示中间协议和收件人。例如,请求消息可以从HTTP / 1.0用户代理发送到代号为“fred”的内部代理,该代理使用HTTP / 1.1将请求转发到athere.com的公共代理,该代理完成请求将其转发到源服务器,网址为www.ics.uci.edu。www.ics.uci.edu收到的请求将具有以下Via头域:

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

升级头域旨在提供从HTTP / 1.1转换到其他不兼容协议的简单机制。

警告

警告通用头被用来携带这可能不是在该消息中被反射的消息的状态或转换的附加信息。响应可能携带多个警告标题。

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

客户端请求头

接受

接受请求头字段可以被用于指定其是用于响应上可接受的某些媒体类型。一般语法如下:

Accept: type/subtype [q=qvalue]

可以列出多种介质类型,用逗号分隔,可选的q值表示接受类型的可接受质量等级,范围为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实体,如果不存在,则发送文本/ plain实体。

接受字符集

接收字符集请求标头字段可以被用来指示什么字符集是用于响应是可接受的。以下是一般的语法:

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: 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: language [q=qvalue]

可以使用逗号分隔多种语言,可选的qvalue以0到1的比例表示非优选语言的可接受的质量等级。以下是一个示例:

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

授权

授权请求标头字段值由包含用户代理的针对资源的境界认证信息证书被请求。一般语法是:

Authorization : credentials

HTTP / 1.0规范定义了BASIC授权方案,其中授权参数是用户名字符string在base 64中编码的密码。以下是一个示例:

Authorization: BASIC Z3Vlc3Q6Z3Vlc3QxMjM=

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

曲奇饼

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

Cookie: name=value

可以使用分号指定多个Cookie,如下所示:

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

期望

期望请求头字段被用于指示该服务器行为的一组特定由客户端必需的。一般语法是:

Expect : 100-continue | expectation-extension

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

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

From: webmaster@w3.org

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

主办

主机请求头字段用于指定Internet主机和被请求的资源的端口号。一般语法是:

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

主机没有任何尾随端口信息意味着默认端口,这是80。例如,对于在源服务器上的请求http://www.w3.org/pub/WWW/将是:

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

如果匹配

如果-匹配请求头字段与方法中使用,使之条件。只有当该标签中的给定值与ETag表示的给定实体标签相匹配时,此标头才会请求服务器执行请求的方法一般语法是:

If-Match : entity-tag

星号(*)匹配任何实体,只有当实体存在时,事务才会继续。以下是可能的例子:

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

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

If-Modified-Since

的If-Modified-由于请求头字段用于与一个方法,使之条件。如果请求的URL自此字段中指定的时间以来未被修改,则不会从服务器返回实体; 相反,将返回304(未修改)的响应,而不需要任何消息体。if-modified的一般语法是:

If-Modified-Since : HTTP-date

该范围的一个例子是:

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

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

如果无匹配

如果-无-匹配请求头字段与方法中使用,使之条件。只有当此标签中的一个给定值与由ETag表示的给定实体标签匹配时,此标头才会请求服务器执行请求的方法一般语法是:

If-None-Match : entity-tag

星号(*)匹配任何实体,只有当实体不存在时,事务才会继续。以下是可能的例子:

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

如果范围

如果-范围请求报头字段可以用一个条件GET可以使用,如果它已经被改变,以请求缺失,如果它没有被改变的实体的唯一的部分,并且整个实体。一般语法如下:

If-Range : entity-tag | HTTP-date

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

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

这里如果从给定的日期起没有修改文档,服务器返回由Range头给出的字节范围,否则返回所有的新文档。

如果 - 未修改 - 自

如果未改性的-由于请求头字段与方法中使用,使之条件。一般语法是:

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

最大-转发请求标头字段提供与TRACE和OPTIONS方法的机制,以限制代理或网关可以将该请求转发到下一个入站服务器的数量。这是一般的语法:

Max-Forwards : n

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

Max-Forwards : 5

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

代理授权

代理授权请求头字段允许客户端本身(或其用户)识别与需要验证的代理。这是一般的语法:

Proxy-Authorization : credentials

代理授权字段值由包含代理的用户代理和/或所请求的资源范围的认证信息的凭证组成。

范围

范围请求报头字段指定从文档请求的内容的部分范围(多个)。一般语法是:

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

byte-range-spec中的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请求头域允许客户端指定从该URL已被请求的资源的地址(URI)。一般语法如下:

Referer : absoluteURI | relativeURI

以下是一个简单的例子:

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

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

TE

TE请求头域指明了扩展传输编码,它愿意在响应和它是否愿意接受在分块拖车场接受传输编码以下是一般的语法:

TE   : t-codings

关键字“预告片”的存在表示客户端愿意接受分块传输编码中的预告片字段,并且以下列方式之一指定:

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

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

用户代理

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

User-Agent : product | comment

例:

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

服务器响应头

接受范围

的Accept-范围响应头域允许服务器以指示其接受用于资源范围的请求。一般语法是:

Accept-Ranges  : range-unit | none

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

Accept-Ranges: bytes

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

Accept-Ranges: none

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

年龄

年龄响应头字段传送由于响应(或其再验证)的时间量的发送者的估计在原点服务器生成。一般语法是:

Age : delta-seconds

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

Age: 1030

包含缓存的HTTP / 1.1服务器必须在每个从其自己的缓存生成的响应中包含一个Age头域。

ETag

ETag的响应头域提供了所请求的变体的实体标签的当前值。一般语法是:

ETag :  entity-tag

这里有一些简单的例子:

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

位置

位置响应头字段用于收件人重定向到比Request-URI中完成其他的位置。一般语法是:

Location : absoluteURI

以下是一个简单的例子:

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

Content-Location头域与Location的区别在于Content-Location标识了请求中包含的实体的原始位置。

代理验证

代理身份验证响应头域必须被包括作为407(代理身份验证必需的)响应的一部分。一般语法是:

Proxy-Authenticate  : challenge

重试

重发后响应头域可以用503(服务不可用)响应被用于指示该服务被多久预计不可用给请求客户端。一般语法是:

Retry-After : HTTP-date | delta-seconds

例子:

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

在后一个例子中,延迟是2分钟。

服务器

服务器响应头域包含关于所使用的原始服务器处理请求的软件信息。一般语法是:

Server : product | comment

以下是一个简单的例子:

Server: Apache/2.2.14 (Win32)

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

Set-Cookie

的Set-Cookie响应头字段包含一个名称/值对信息保留此URL。一般语法是:

Set-Cookie: NAME=VALUE; OPTIONS

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

SN 选项和说明
1 注释=注释

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

2 域=域

Domain属性指定cookie有效的域。

3 Expires =日期时间

cookie将过期的日期。如果它是空白的,cookie将在访问者退出浏览器时过期。

4 路径=路径

Path属性指定此cookie应用于的URL的子集。

5 安全

它指示用户代理仅在安全连接下返回cookie。

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

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

变化

因人而异响应头字段指定该实体有多个源,并且因此可以根据所指定的请求报头(多个)的列表而变化。以下是一般的语法:

Vary : field-name

您可以指定由逗号分隔的多个标题,并且星号“*”的值指示未指定的参数不限于请求标头。以下是一个简单的例子:

Vary: Accept-Language, Accept-Encoding

这里的字段名称不区分大小写。

WWW认证

WWW身份验证响应头域必须包含在401(未授权)响应消息。字段值由至少一个指示认证方案的挑战和适用于Request-URI的参数组成。一般语法是:

WWW-Authenticate : challenge

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

WWW-Authenticate: BASIC realm="Admin"

实体标题

允许

允许实体头域列出了一组由请求URI标识的资源支持的方法。一般语法是:

Allow : Method

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

Allow: GET, HEAD, PUT

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

内容编码

内容编码实体头字段被用作改性剂的媒体类型。一般语法是:

Content-Encoding : content-coding

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

Content-Encoding: gzip

如果请求消息中的实体的内容编码对于原始服务器是不可接受的,则服务器应以状态码415(不支持的媒体类型)进行响应。

内容语言

内容的语言实体头字段描述目标观众的封闭实体的自然语言(S)。以下是一般的语法:

Content-Language : language-tag

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

Content-Language: mi, en

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

内容长度

Content-Length的实体头字段指示实体主体的大小,以字节为单位的十进制数,发送到接收方,或在HEAD方法的情况下,这将被发送的实体主体的大小,有请求是GET。一般语法是:

Content-Length : DIGITS

以下是一个简单的例子:

Content-Length: 3495

任何Content-Length大于或等于零是一个有效值。

内容位置

内容-位置实体头字段可以被使用时,该实体是从所请求的资源的URI单独可访问的位置以提供用于封闭该消息中的实体资源位置。一般语法是:

Content-Location:  absoluteURI | relativeURI 

以下是一个简单的例子:

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

Content-Location的值也定义了实体的基本URI。

Content-MD5

内容-MD5实体头字段可以被用来提供实体的MD5摘要,用于检查该消息的在接收到的完整性。一般语法是:

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

以下是一个简单的例子:

Content-MD5  : 8c2d46911f3f5a326455f0ed7a8ed3b3

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

内容范围

内容范围实体头域与部分实体主体发送到指定在全实体主体部分体应适用。一般语法是:

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-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

内容类型

内容类型实体头字段指示媒体类型发送给接收方,或在头的方法,将已被发送的媒体类型的情况下,实体主体的,具有请求是一个GET。一般语法是:

Content-Type : media-type

以下是一个例子:

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

到期

过期实体头字段给出的日期/时间之后,响应被视为失效。一般语法是:

Expires : HTTP-date

以下是一个例子:

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

上一次更改

的Last-Modified实体头字段指示原始服务器认为变种最后一次修改的日期和时间。一般语法是:

Last-Modified: HTTP-date

以下是一个例子:

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