HTTP - Header 字段

  • 简述

    HTTP header 字段提供有关请求或响应或有关消息正文中发送的对象的必需信息。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用于指定缓存参数或从缓存中请求某些类型的文档的通用header 。缓存指令在逗号分隔的列表中指定。例如:
    
    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 header 指定的最大年龄。s-maxage 指令总是被私有缓存忽略。

    Connection

    Connection 通用header 字段允许发送方指定该特定连接所需的选项,并且不得由代理通过进一步的连接进行通信。以下是使用连接头的简单语法:
    
    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 通用header 字段用于包含可能适用于请求/响应链中的任何接收者的实现特定指令。例如:
    
    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 头域的语法如下:
    
    Transfer-Encoding: chunked
    
    所有传输编码值都不区分大小写。

    Upgrade

    Upgrade常用头允许客户指定什么额外的通信协议支持,并希望如果服务器发现是适当的交换机协议使用。例如:
    
    Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
    
    Upgrade header 字段旨在提供一种简单的机制,用于从 HTTP/1.1 转换到其他一些不兼容的协议。

    Via

    Via通用头必须由网关和代理被用于指示中间协议和收件人。例如,请求消息可以从 HTTP/1.0 用户代理发送到代号为“fred”的内部代理,该代理使用 HTTP/1.1 将请求转发到位于 nowhere.com 的公共代理,该代理通过将其转发到 www.ics.uci.edu 上的原始服务器。www.ics.uci.edu 收到的请求将具有以下 Via header 字段:
    
    Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
    
    Upgrade header 字段旨在提供一种简单的机制,用于从 HTTP/1.1 转换到其他一些不兼容的协议。

    Warning

    Warning通用头被用来携带这可能不是在该消息中被反射的消息的状态或转换的附加信息。一个响应可能携带多个警告header 。
    
    Warning : warn-code SP warn-agent SP warn-text SP warn-date
    
  • 客户端请求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/htmltext/x-c 和 是首选媒体类型,但如果它们不存在,则发送 text/x-dvi 实体,如果不存在,则发送 text/plain 实体。

    Accept-Charset

    Accept-Charset请求header 字段可以被用来指示什么字符集是用于响应是可接受的。以下是一般语法:
    
    Accept-Charset: character_set [q=qvalue]
    
    可以列出多个字符集,以逗号分隔,可选的 qvalue 表示非首选字符集的可接受质量级别,范围为 0 到 1。以下是一个示例:
    
    Accept-Charset: iso-8859-5, unicode-1-1; q=0.8
    
    特殊值“*”,如果出现在 Accept-Charset 字段,匹配每个字符集,如果没有 Accept-Charset header 存在,默认是任何字符集都是可以接受的。

    Accept-Encoding

    Accept-Encoding请求header 字段类似于接受,但限制了内容编码是在响应是可接受的。一般语法是:
    
    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请求header 字段类似于接受,但限制的一组优选作为对所述请求的响应自然语言。一般语法是:
    
    Accept-Language: language [q=qvalue]
    
    可以用逗号分隔列出多种语言,可选的 qvalue 表示非首选语言的可接受质量级别,范围为 0 到 1。以下是一个示例:
    
    Accept-Language: da, en-gb;q=0.8, en;q=0.7
    

    Authorization

    Authorization请求header 字段值由包含被请求的用户代理的针对资源的境界认证信息凭据。一般语法是:
    
    Authorization : credentials
    
    HTTP/1.0 规范定义了 BASIC 授权方案,其中授权参数是 username:password 以 base 64 编码。以下是一个示例:
    
    Authorization: BASIC Z3Vlc3Q6Z3Vlc3QxMjM=
    
    解码成的值是 guest:guest123 在哪里 guest 是用户 ID 和 guest123 是密码。

    Cookie

    Cookie请求header 字段值中包含的名称/值对信息存储该URL。以下是一般语法:
    
    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
    
    此header 字段可用于记录目的,并作为识别无效或不需要的请求来源的手段。

    Host

    Host请求头字段用于指定Internet主机和被请求的资源的端口号。一般语法是:
    
    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请求 header 字段与方法中使用,使之条件。仅当此标记中的给定值与由表示的给定实体标记匹配时,此header 才请求服务器执行请求的方法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-since 的一般语法是:
    
    If-Modified-Since : HTTP-date
    
    该字段的一个示例是:
    
    If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
    
    如果没有实体标签匹配,或者如果给出“*”并且当前实体不存在,则服务器不得执行请求的方法,并且必须返回 412(前提条件失败)响应。

    If-None-Match

    If-None-Match请求头字段与方法中使用,使之条件。仅当此标记中的给定值之一与由表示的给定实体标记匹配时,此header 才请求服务器执行所请求的方法ETag. 一般语法是:
    
    If-None-Match : entity-tag
    
    星号 (*) 匹配任何实体,并且仅当实体不存在时事务才会继续。以下是可能的示例:
    
    If-None-Match: "xyzzy"
    If-None-Match: "xyzzy", "r2d2xxxx", "c3piozzzz"
    If-None-Match: *
    

    If-Range

    If-Range请求 header 字段可以用一个条件GET可以使用,如果它已经被改变,以请求缺失,如果它没有被改变的实体的唯一的部分,并且整个实体。一般语法如下:
    
    If-Range : entity-tag | HTTP-date
    
    实体标签或日期均可用于标识已接收的部分实体。例如:
    
    If-Range: Sat, 29 Oct 1994 19:43:31 GMT
    
    这里如果文档自给定日期以来没有被修改,则服务器返回 Range header 给出的字节范围,否则返回所有新文档。

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

    Max-Forwards

    Max-Forwards请求header 字段提供与TRACE和OPTIONS方法的机制,以限制代理或网关可以将该请求转发到下一个入站服务器的数量。这是一般语法:
    
    Max-Forwards : n
    
    Max-Forwards 值是一个十进制整数,表示该请求消息可以被转发的剩余次数。这对于使用 TRACE 方法进行调试非常有用,可以避免无限循环。例如:
    
    Max-Forwards : 5
    
    对于 HTTP 规范中定义的所有其他方法,可以忽略 Max-Forwards header 字段。

    Proxy-Authorization

    Proxy-Authorization请求头字段允许客户端本身(或其用户)识别与需要验证的代理。这是一般语法:
    
    Proxy-Authorization : credentials
    
    Proxy-Authorization 字段值由包含用户代理的身份验证信息的凭据组成,用于代理和/或所请求资源的领域。

    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请求头域允许客户端指定从该URL已被请求的资源的地址(URI)。一般语法如下:
    
    Referer : absoluteURI | relativeURI
    
    下面是一个简单的例子:
    
    Referer: http://www.jc2182.org/http/index.htm
    
    如果字段值是相对 URI,则应相对于Request-URI进行解释。

    TE

    TE请求头域指明了扩展传输编码,它愿意在响应和它是否愿意接受在分块拖车场接受传输编码。以下是一般语法:
    
    TE   : t-codings
    
    关键字“trailers”的存在表明客户端愿意接受分块传输编码中的拖车字段,并且指定了以下任一方式:
    
    TE: deflate
    TE:
    TE: trailers, deflate;q=0.5
    
    如果 TE 字段值为空或不存在 TE 字段,则只对传输编码进行分块。没有传输编码的消息总是可以接受的。

    User-Agent

    User-Agent请求-header 字段包含关于用户代理发起请求信息。以下是一般语法:
    User-Agent : product | comment
    
    例子:
    
    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值是非负十进制整数,以秒为单位表示时间。下面是一个简单的例子:
    
    Age: 1030
    
    包含缓存的 HTTP/1.1 服务器必须在从其自己的缓存生成的每个响应中包含一个 Age header 字段。

    ETag

    ETag响应头域提供了所请求的变体的实体标签的当前值。一般语法是:
    
    ETag :  entity-tag
    
    下面是一些简单的例子:
    
    ETag: "xyzzy"
    ETag: W/"xyzzy"
    ETag: ""
    

    Location

    Location响应头字段用于收件人重定向到比Request-URI中完成其他的位置。一般语法是:
    
    Location : absoluteURI
    
    下面是一个简单的例子:
    
    Location: http://www.jc2182.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)
    
    如果响应是通过代理转发的,则代理应用程序不得修改服务器响应header 。

    Set-Cookie

    Set-Cookie响应头字段包含一个名称/值对信息保留此URL。一般语法是:
    
    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 header 的示例:
    
    Set-Cookie: name1=value1,name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
    

    Vary

    Vary响应头字段指定该实体有多个源,并且因此根据指定的请求报头(s)列表而变化。以下是一般语法:
    
    Vary : field-name
    
    您可以指定由逗号分隔的多个header 和星号“*”值表示未指定的参数不限于请求header 。下面是一个简单的例子:
    
    Vary: Accept-Language, Accept-Encoding
    
    这里的字段名称不区分大小写。

    WWW-Authenticate

    WWW-Authenticate响应头域必须包含在401(未授权)响应消息。该字段值至少包含一个质询,指示适用于请求 URI 的认证方案和参数。一般语法是:
    
    WWW-Authenticate : challenge
    
    WWW-Authenticate 字段值可能包含多个质询,或者如果提供了多个 WWW-Authenticate 头字段,则质询本身的内容可以包含以逗号分隔的身份验证参数列表。下面是一个简单的例子:
    
    WWW-Authenticate: BASIC realm="Admin"
    
  • 实体标头

    Allow

    允许实体头域列出了一组由请求URI标识的资源支持的方法。一般语法是:
    
    Allow : Method
    
    您可以指定多个以逗号分隔的方法。下面是一个简单的例子:
    
    Allow: GET, HEAD, PUT
    
    此字段不能阻止客户端尝试其他方法。

    Content-Encoding

    Content-Encoding实体头字段被用作改性剂的媒体类型。一般语法是:
    
    Content-Encoding : content-coding
    
    内容编码是由请求 URI 标识的实体的特征。下面是一个简单的例子:
    
    Content-Encoding: gzip
    
    如果原始服务器不接受请求消息中实体的内容编码,则服务器应以状态代码 415(不支持的媒体类型)进行响应。

    Content-Language

    Content-Language实体头字段描述了预期观众对于封闭实体的自然语言(S)。以下是一般语法:
    
    Content-Language : language-tag
    
    对于面向多个受众的内容,可能会列出多种语言。下面是一个简单的例子:
    
    Content-Language: mi, en
    
    Content-Language 的主要目的是允许用户根据用户自己的首选语言识别和区分实体。

    Content-Length

    Content-Length实体头字段指示实体主体的大小,以字节为单位的十进制数,发送到接收方,或在HEAD方法的情况下,这将被发送的实体主体的大小,如果请求是 GET。一般语法是:
    
    Content-Length : DIGITS
    
    下面是一个简单的例子:
    
    Content-Length: 3495
    
    任何大于或等于零的 Content-Length 都是有效值。

    Content-Location

    Content-Location实体头字段可以被使用时,该实体是从所请求的资源的URI单独可访问的位置以提供用于封闭该消息中的实体资源位置。一般语法是:
    
    Content-Location:  absoluteURI | relativeURI 
    
    下面是一个简单的例子:
    
    Content-Location: http://www.jc2182.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 header 和一个 Content-Length header 一起传输,该header 显示实际传输的字节数。例如,
    
    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