开发手册 欢迎您!
软件开发者资料库

HTTP - Header Fields

HTTP Header Fields - 从简单的概述,协议参数,消息体系结构,请求,响应,连接,缓存,状态代码,标头字段,安全性开始,从简单而简单的步骤学习HTTP协议(超文本,传输,基于RFC 2616的协议)和GET,POST,HEAD,PUT等方法以及合适的例子。

HTTP标头字段提供有关请求或响应的所需信息,或有关在邮件正文中发送的对象的信息.有四种类型的HTTP邮件标头:

  • General-header:这些标题字段包含请求和响应消息的一般适用性.

  • 客户端请求标头:这些标头字段仅适用于请求消息.

  • 服务器响应标头:这些标题字段仅适用于响应消息.

  • 实体标题:这些标题字段定义有关实体主体的元信息,或者,如果没有正文,则定义关于请求标识的资源.

一般标题

缓存控制

缓存控制一般-header字段用于指定所有缓存系统必须遵守的指令.语法如下:

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

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

Cache-control: no-cache

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

SN缓存请求指令和描述
1 no-cache

如果未成功重新验证原始服务器,则缓存不得使用响应来满足后续请求.

2 no-store

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

3 max-age = seconds

表示客户端愿意接受年龄不超过指定时间(秒)的响应.

4 max-stale [=秒]

表示客户端愿意接受超过其到期时间的响应.如果给出秒数,则不得超过该时间.

5 min-fresh = seconds

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

6 no-transform

不转换实体.

7 only-if-cached

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

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

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

表示任何缓存都可以缓存响应.

2私人

表示全部或部分回复message仅供单个用户使用,不得由共享缓存缓存.

3 no-cache

如果没有使用原始服务器成功重新验证,缓存不得使用响应来满足后续请求.

4 no-store

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

5无变换

不转换实体 -

6必须重新验证

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

7 proxy-revalidate

proxy-revalidate指令与must-revalidate指令具有相同的含义,但它不适用于非共享用户代理缓存.

8 max-age = seconds

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

9 s-maxage =秒

此指令指定的最大年龄将覆盖max-age指令或th指定的最大年龄e Expires标题.私有缓存总是忽略s-maxage指令.

连接

Connection general-header字段允许发送方指定该特定连接所需的选项,并且代理不得通过其他连接进行通信.以下是使用连接头的简单语法:

Connection : "Connection"

HTTP/1.1定义了"close"连接选项,发送方在完成响应后发出连接将被关闭的信号.例如:

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 1123Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format

这里第一种格式是最受欢迎的格式.

Pragma

Pragma general-header字段用于包含可能适用于请求/响应链中任何收件人的特定于实现的指令.例如:

Pragma: no-cache

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

Trailer

预告片常规字段值表示给定的标题字段集存在于用分块传输编码编码的消息的预告片.以下是Trailer标题字段的语法:

Trailer : field-name

"Trailer"标题字段中列出的邮件标题字段不得包含以下标题字段:

  • 传输编码

  • 内容长度

  • Trailer

转移编码

转移编码通用标头字段指示已应用的转换类型邮件正文,以便在发件人和收件人之间安全地传输它.这与内容编码不同,因为传输编码是消息的属性,而不是实体主体的属性. Transfer-Encoding标头字段的语法如下:

Transfer-Encoding:chunked

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

升级

升级一般 - header允许客户端指定它支持的其他通信协议,并且如果服务器发现它适合切换协议,则希望使用它.例如:

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

升级头字段旨在提供一种简单的机制,用于从HTTP/1.1转换到其他一些不兼容的协议.

通过

网关和代理必须使用 Via general-header来指示中间协议和接收者.例如,可以将请求消息从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)

升级头字段旨在提供一种从HTTP/1.1转换到其他不兼容协议的简单机制.

警告

警告通用标头用于携带有关消息的状态或转换的其他信息,这些信息可能不是反映在消息中.响应可能带有多个警告标题.

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

客户请求标题

接受

接受 request-header字段可用于指定响应可接受的某些媒体类型.一般语法如下:

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/html text/xc 并且是首选媒体类型,但如果它们不存在,则发送 text/x-dvi 实体,如果不存在,则发送 text/plain entity.

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,但限制了响应中可接受的内容编码.一般语法是:

Accept-Encoding: encoding types

示例如下:

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

接受语言

接受语言 request-header字段与Accept类似,但限制首选的自然语言集作为对请求的响应.一般语法是:

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授权方案,其中授权参数是以base 64编码的用户名:密码的字符串.以下是一个示例:

Authorization: BASIC Z3Vlc3Q6Z3Vlc3QxMjM=

解码成的值是 guest:guest123 其中来宾是用户ID, guest123 是密码.

Cookie

Cookie request-header字段值包含为该URL存储的名称/值对信息.以下是一般语法:

Cookie:name = value

可以使用分号分隔多个cookie,如下所示:

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

Expect

期望请求标头字段用于指示一组特定的服务器行为是客户要求.一般语法是:

Expect : 100-continue | expectation-extension

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

From

发件人请求标头字段包含一个互联网电子邮件地址控制请求用户代理的人类用户.以下是一个简单的例子:

From: webmaster@w3.org

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

主机

Host request-header字段用于指定Internet主机和所请求资源的端口号.一般语法是:

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

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

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

如果匹配

If-Match request-header字段与方法一起使用以使其成为条件.仅当此标记中的给定值与 ETag 表示的给定实体标记匹配时,此标头才会请求服务器执行所请求的方法.一般语法是:

If-Match : entity-tag

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

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

如果没有任何实体标签匹配,或者如果给出"*"并且不存在当前实体,服务器不能执行所请求的方法,并且必须返回412(Precondition Failed)响应.

If-Modified-Since

If-Modified-Since request-header字段与方法一起使用以使其成为条件.如果自该字段中指定的时间以来未请求修改请求的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 request-header字段与方法一起使用以使其成为条件.仅当此标记中的给定值之一与 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-对于HTTP规范中定义的所有其他方法,可以忽略转发头字段.

代理授权

代理授权 request-header字段允许客户端将自己(或其用户)标识到需要身份验证的代理.以下是一般语法:

Proxy-Authorization : credentials

Proxy-Authorization字段值包含凭证,其中包含代理的用户代理和/或所请求资源的域的身份验证信息.

范围

Range request-header字段指定从文档请求的内容的部分范围.一般语法是:

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 bytesRange: bytes=500-999- The final 500 bytesRange: bytes=-500- The first and last bytes onlyRange: bytes=0-0,-1

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

Referer

Referer request-header字段允许客户端指定从中请求URL的资源的地址(URI).一般语法如下:

Referer:absoluteURI | relativeURI

以下是一个简单的例子:

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

如果字段值是相对URI,则应相对于

TE

TE 请求标头字段表示扩展名转移编码它愿意在响应中接受它是否愿意接受分块传输编码中的预告片字段.以下是一般语法:

TE:t-codings

关键字"预告片"的存在表示客户端愿意接受分块传输编码中的预告片字段,并指定其中一种方式:

TE: deflateTE: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)

服务器响应标头

接受范围

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

Accept-Ranges:range-unit | none

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

Accept-Ranges:bytes

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

Accept-Ranges:none

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

年龄

年龄响应标头字段表示发件人对自响应(或其重新验证)以来的时间量的估计)是在原始服务器上生成的.一般语法是:

Age : delta-seconds

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

Age :1030

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

ETag

ETag response-header字段提供所请求变体的实体标记的当前值.一般语法是:

ETag:entity-tag

这里是一些简单的例子:

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

位置

位置响应标头字段用于将收件人重定向到Request-URI以外的位置以完成.一般语法是:

Location : absoluteURI

以下是简单示例:

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

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

代理 - 验证

Proxy-Authenticate 响应标头字段必须作为407(需要代理验证)响应的一部分包含在内.一般语法是:

Proxy-Authenticate  : challenge

重试-After

Retry-After 响应标头字段可与503(服务不可用)响应一起使用,以指示服务预计不可用的时间到请求客户端.一般语法是:

Retry-After:HTTP-date | delta-seconds

示例:

Retry-After: Fri, 31 Dec 1999 23:59:59 GMTRetry-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选项和描述
1Comment=comment

此选项可用于指定与cookie关联的任何评论.

2 Domain = domain

Domain属性指定cookie有效的域.

3Expires=Date-time

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

4Path=path

Path属性指定此cookie适用的URL子集.

5Secure

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

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

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

Vary

Vary response-header字段指定实体具有多个源,因此可以根据指定的请求头列表而变化.以下是一般语法:

Vary:field-name

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

Vary:Accept-Language,Accept-Encoding

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

WWW-Authenticate

WWW-Authenticate 响应 - 标头字段必须包含在401(未授权)响应消息中.字段值包括至少一个挑战,该挑战指示适用于Request-URI的认证方案和参数.一般语法是:

WWW-Authenticate:challenge

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

WWW-Authenticate:BASIC realm ="Admin"

实体标题

允许

允许实体标题字段列出了支持的方法集Request-URI标识的资源.一般语法是:

Allow : Method

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

Allow :GET,HEAD,PUT

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

内容编码

Content-Encoding 实体-header字段用作媒体类型的修饰符.一般语法是:

Content-Encoding:content-coding

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

Content-Encoding:gzip

If the content-coding of an entity in a request message is not acceptable to the origin server, the server should respond with a status code of 415 (Unsupported Media Type).

Content-Language

The Content-Language entity-header field describes the natural language(s) of the intended audience for the enclosed entity. Following is the general syntax:

Content-Language : language-tag

Multiple languages may be listed for content that is intended for multiple audiences. Following is a simple example:

Content-Language: mi, en

The primary purpose of Content-Language is to allow a user to identify and differentiate entities according to the user’s own preferred language.

Content-Length

The Content-Length entity-header field indicates the size of the entity-body, in decimal number of OCTETs, sent to the recipient or, in the case of the HEAD method, the size of the entity-body that would have been sent, had the request been a GET. The general syntax is:

Content-Length : DIGITS

Following is a simple example:

Content-Length: 3495

Any Content-Length greater than or equal to zero is a valid value.

Content-Location

The Content-Location entity-header field may be used to supply the resource location for the entity enclosed in the message when that entity is accessible from a location separate from the requested resource’s URI. The general syntax is:

Content-Location:  absoluteURI | relativeURI

Following is a simple example:

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

The value of Content-Location also defines the base URI for the entity.

Content-MD5

The Content-MD5 entity-header field may be used to supply an MD5 digest of the entity for checking the integrity
of the message upon receipt. The general syntax is:

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

Following is a simple example:

Content-MD5  : 8c2d46911f3f5a326455f0ed7a8ed3b3

The MD5 digest is computed based on the content of the entity-body, including any content-coding that has been applied, but not including any transfer-encoding applied to the message-body.

Content-Range

The Content-Range entity-header field  is sent with a partial entity-body to specify where in the full entity-body the partial body should be applied. The general syntax is:

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

Examples of byte-content-range-spec values, assuming that the entity contains a total of 1234 bytes:

- 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

When an HTTP message includes the content of a single range,  this content is transmitted with a Content-Range header, and a Content-Length header showing the number of bytes actually transferred. For example,

 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

The Content-Type entity-header field indicates the media type of the entity-body sent to the recipient or, in the case of the HEAD method, the media type that would have been sent, had the request been a GET. The general syntax is:

Content-Type : media-type

Following is an example:

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

Expires

The Expires entity-header field gives the date/time after which the response is considered stale. The general syntax is:

Expires : HTTP-date

Following is an example:

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

Last-Modified

The Last-Modified entity-header field indicates the date and time at which the origin server believes the variant was last modified. The general syntax is:

Last-Modified: HTTP-date

Following is an example:

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