http 标头字段——迹忆客-ag捕鱼王app官网
http 标头字段提供有关请求或响应或有关消息正文中发送的对象的必需信息。http 消息头有四种类型:
- general-header:这些头字段对请求和响应消息都具有普遍适用性。
- request-header:这些头字段仅适用于请求消息。
- response-header:这些头字段仅适用于响应消息。
- entity-header:这些标头字段定义了关于实体主体的元信息,或者,如果没有主体,则定义关于请求标识的资源的元信息。
general header
缓存控制
cache-control
通用头字段用于指定所有缓存系统必须遵守的指令。语法如下:
cache-control : cache-request-directive|cache-response-directive
http 客户端或服务器可以使用cache-control通用标头来指定缓存的参数或从缓存中请求某些类型的文档。缓存指令在逗号分隔的列表中指定。例如:
cache-control: no-cache
下表列出了客户端可以在其 http 请求中使用的重要缓存请求指令:
序号 | 缓存请求指令 | 描述 |
---|---|---|
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 响应中使用以下重要的缓存响应指令:
序号 | 缓存请求指令 | 描述 |
---|---|---|
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 通用字段值指示给定的头字段集存在于使用** chunked transfer-coding** 编码的消息的尾部中。以下是 trailer 头域的语法:
trailer : field-name
trailer 头字段中列出的消息头字段不得包含以下头字段:
- transfer-encoding
- content-length
- trailer
transfer encoding
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)
warning
warning
通用头被用来携带这可能不是在该消息中被反射的消息的状态或转换的附加信息。一个响应可能携带多个警告标头。
warning : warn-code sp warn-agent sp warn-text sp warn-date
request-header
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/html和text/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-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中的名称/值对信息。以下是一般语法:
cookie: name=value
可以指定多个 cookie,以分号分隔,如下所示:
cookie: name1=value1;name2=value2;name3=value3
expect
expect 请求头字段被用于指示客户端期望该服务器执行的特定行为一般语法是:
expect : 100-continue | expectation-extension
如果服务器收到包含其不支持的期望扩展的期望字段的请求,则它必须以 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(前提条件失败)响应。更多响应状态码请查看我们的 http 状态码
if-modified-since
if-modified-since 请求头也是和 请求方法 一起使用,该请求头作为条件,如果该条件成立,则由服务器执行相应的请求方法。if-modified-since 的一般语法是:
if-modified-since : http-date
该字段的一个示例是:
if-modified-since: sat, 29 oct 1994 19:43:31 gmt
如果请求的 url 自该字段指定的时间以来没有被修改,则不会从服务器返回实体;相反,将返回 304(未修改)响应,而没有任何消息正文。
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 请求头字段用来使得 range 头字段在一定条件下起作用:当字段值中的条件得到满足时,range 头字段才会起作用,同时服务器回复206 部分内容状态码,以及range 头字段请求的相应部分;如果字段值中的条件没有得到满足,服务器将会返回 200 ok 状态码,并返回完整的请求资源。一般语法如下:
if-range : entity-tag | http-date
实体标签或日期均可用于标识已接收的部分实体。例如:
if-range: sat, 29 oct 1994 19:43:31 gmt
if-unmodified-since
if-unmodified-since 消息头用于请求之中,使得当前请求成为条件式请求:只有当资源在指定的时间之后没有进行过修改的情况下,服务器才会返回请求的资源,或是接受 post 或其他 non-safe 方法的请求。如果所请求的资源在指定的时间之后发生了修改,那么会返回 412 (precondition failed) 错误。一般语法是:
if-unmodified-since : http-date
如果请求的资源在此字段中指定的时间后没有被修改,服务器应该执行请求的操作,就像 if-unmodified-since 头不存在一样。例如:
if-unmodified-since: sat, 29 oct 1994 19:43:31 gmt
max-forwards
max-forwards 请求标头字段提供与trace和options方法的机制,以限制代理或网关可以将该请求转发到下一个入站服务器的数量。这是一般语法:
max-forwards : n
max-forwards 值是一个十进制整数,表示该请求消息可以被转发的剩余次数。这对于使用 trace 方法进行调试非常有用,可以避免无限循环。例如:
max-forwards : 5
对于 http 规范中定义的所有其他方法,可以忽略 max-forwards 标头字段。
proxy-authorization
proxy-authorization 是一个请求首部,其中包含了用户代理提供给代理服务器的用于身份验证的凭证。这个首部通常是在服务器返回了 407 proxy authentication required 响应状态码及 proxy-authenticate 首部后发送的。一般语法:
proxy-authorization : credentials
range
range 是一个请求首部,告知服务器返回文件的哪一部分。一般语法是:
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
referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。一般语法如下:
referer : absoluteuri | relativeuri
下面是一个简单的例子:
referer: http://www.jiyik.com/index.html
如果字段值是相对 uri,则应相对于request-uri进行解释。
te
te 请求型头部用来指定用户代理希望使用的传输编码类型。一般语法如下:
te : t-codings
关键字“trailers”的存在表明客户端愿意接受分块传输编码中的trailer字段,并且指定了以下任一方式:
te: deflate
te:
te: trailers, deflate;q=0.5
如果 te 字段值为空或不存在 te 字段,则只对传输编码进行分块。没有传输编码的消息总是可以接受的。
user-agent
user-agent 请求-报头字段包含关于用户代理发起请求信息。以下是一般语法:
user-agent : product | comment
例子:
user-agent: mozilla/4.0 (compatible; msie5.01; windows nt)
response-header
accept-ranges
服务器使用 http 响应头 accept-ranges 标识自身支持范围请求(partial requests)。字段的具体值用于定义范围请求的单位。一般语法是:
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 http响应头是资源的特定版本的标识符。这可以让缓存更高效,并节省带宽,因为如果内容没有改变,web服务器不需要发送完整的响应。而如果内容发生了变化,使用etag有助于防止资源的同时更新相互覆盖(“空中碰撞”)。一般语法是:
etag : entity-tag
下面是一些简单的例子:
etag: "xyzzy"
etag: w/"xyzzy"
etag: ""
location
location 首部指定的是需要将页面重新定向至的地址。一般在响应码为3xx的响应中才会有意义。一般语法是:
location : absoluteuri
下面是一个简单的例子:
location: http://www.jiyik.com/index.htm
content-location 头域与 location 的不同之处在于 content-location 指向的是经过内容协商后的资源的直接地址,不需要进行进一步的内容协商。location 对应的是响应,而content-location对应的是要返回的实体。
proxy-authenticate
proxy-authenticate 指定了获取 proxy server (代理服务器)上的资源访问权限而采用的身份验证方式。代理服务器对请求进行验证,以便它进一步传递请求。一般语法是:
proxy-authenticate : challenge
retry-after
retry-after 表示用户代理需要等待多长时间之后才能继续发送请求。这个首部主要应用于以下两种场景:
- 当与 503 (service unavailable,当前服务不存在) 响应一起发送的时候,表示服务下线的预期时长。
- 当与重定向响应一起发送的时候,比如 301 (moved permanently,永久迁移),表示用户代理在发送重定向请求之前需要等待的最短时间。
一般语法是:
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 被用来由服务器端向客户端发送 cookie。一般语法是:
set-cookie: name=value; options
set-cookie 响应头包含令牌 set-cookie,后跟一个或多个 cookie 的逗号分隔列表。以下是可以指定为选项的可能值:
序号 | 选项 | 描述 |
---|---|---|
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 是一个http响应头部信息,它决定了对于未来的一个请求头,应该用一个缓存的回复(response)还是向源服务器请求一个新的回复。它被服务器用来表明在 content negotiation algorithm(内容协商算法)中选择一个资源代表的时候应该使用哪些头部信息(headers)。一般语法如下:
vary : field-name
可以指定由逗号分隔的多个标头和星号“*”值表示未指定的参数不限于请求标头。下面是一个简单的例子:
vary: accept-language, accept-encoding
这里的字段名称不区分大小写。在响应状态码为 304 not modified 的响应中,也要设置 vary 首部,而且要与相应的 200 ok 响应设置得一模一样。
www-authenticate
www-authenticate 响应头定义了使用何种验证方式去获取对资源的连接。
www-authenticate header通常会和一个 401 unauthorized 的响应一同被发送。
一般语法如下:
www-authenticate : challenge
www-authenticate 字段值可能包含多个质询,或者如果提供了多个 www-authenticate 头字段,则质询本身的内容可以包含以逗号分隔的身份验证参数列表。下面是一个简单的例子:
www-authenticate: basic realm="admin"
entity-headers
allow
allow 首部字段用于枚举资源所支持的 http 方法的集合。一般语法如下:
allow : method
你可以指定多个以逗号分隔的方法。下面是一个简单的例子:
allow: get, head, put
此字段不能阻止客户端尝试其他方法。若服务器返回状态码 405 method not allowed,则该首部字段亦需要同时返回给客户端。如果 allow 首部字段的值为空,说明资源不接受使用任何 http 方法的请求。这是可能的,比如服务器需要临时禁止对资源的任何访问。
content-encoding
content-encoding 是一个实体消息首部,用于对特定媒体类型的数据进行压缩。当这个首部出现的时候,它的值表示消息主体进行了何种方式的内容编码转换。这个消息首部用来告知客户端应该怎样解码才能获取在 content-type 中标示的媒体类型内容。一般语法如下:
content-encoding : content-coding
内容编码是由请求 uri 标识的实体的特征。下面是一个简单的例子:
content-encoding: gzip
如果原始服务器不接受请求消息中实体的内容编码,则服务器应以状态代码 415(不支持的媒体类型)进行响应。
content-language
content-language 是一个 entity header (实体消息首部),用来说明访问者希望采用的语言或语言组合,这样的话用户就可以根据自己偏好的语言来定制不同的内容。一般语法如下:
content-language : language-tag
对于面向多个受众的内容,可能会列出多种语言。下面是一个简单的例子:
content-language: mi, en
content-language 的主要目的是允许用户根据用户自己的首选语言识别和区分实体。
content-length
content-length 是一个实体消息首部,用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。一般语法如下:
content-length : digits
下面是一个简单的例子:
content-length: 3495
任何大于或等于零的 content-length 都是有效值。
content-location
content-location 首部指定的是要返回的数据的地址选项。最主要的用途是用来指定要访问的资源经过内容协商后的结果的url。一般语法如下:
content-location: absoluteuri | relativeuri
下面是一个简单的例子:
content-location: http://www.jiyik.com/index.html
content-location 的值还定义了实体的基本 uri。location 与 content-location是不同的,前者(location )指定的是一个重定向请求的目的地址(或者新创建的文件的url),而后者( content-location) 指向的是可供访问的资源的直接地址,不需要进行进一步的内容协商。location 对应的是响应,而content-location对应的是要返回的实体。
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 实体头部用于指示资源的mime类型 media type 。在响应中,content-type标头告诉客户端实际返回的内容的内容类型。浏览器会在某些情况下进行mime查找,并不一定遵循此标题的值; 为了防止这种行为,可以将标题 x-content-type-options 设置为 nosniff。一般语法如下:
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