HTTP教程

HTTP 标题字段

HTTP 标头字段提供有关请求或响应或有关消息正文中发送的对象的必需信息。 HTTP 消息头有四种类型:
General-header:这些头字段对请求和响应消息都具有普遍适用性。 Client Request-header:这些标头字段仅适用于请求消息。 Server Response-header:这些标头字段仅适用于响应消息。 Entity-header:这些标头字段定义了关于实体正文的元信息,或者如果没有正文,则定义关于请求标识的资源的元信息。

通用标题

缓存控制

Cache-Control 通用标头字段用于指定所有缓存系统必须遵守的指令。语法如下:
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 [ = seconds ]
表示客户端愿意接受超过其过期时间的响应。如果给定了秒数,则不得超过该时间。
5 min-fresh = seconds
表示客户端愿意接受新鲜度生命周期不小于其当前年龄加上指定时间(以秒为单位)的响应。
6 no-transform
不转换entity-body。
7 only-if-cached
不检索新数据。缓存只有在缓存中才能发送文档,并且不应联系源服务器查看是否存在更新的副本。
服务器可以在其 HTTP 响应中使用的以下重要缓存响应指令:
SN 缓存响应指令和描述
1 public
表示响应可以被任何缓存缓存。
2 private
表示响应消息的全部或部分是针对单个用户的,不能被共享缓存缓存。
3 no-cache
在没有与源服务器成功重新验证的情况下,缓存不得使用响应来满足后续请求。
4 no-store
缓存不应存储有关客户端请求或服务器响应的任何内容。
5 no-transform
不转换entity-body。
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"
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: no-cache
HTTP/1.0 中定义的唯一指令是 no-cache 指令,并在 HTTP 1.1 中维护以实现向后兼容性。将来不会定义新的 Pragma 指令。

预告片

Trailer 通用字段值表示给定的报头字段集存在于使用分块传输编码编码的消息的报尾中。以下是 Trailer 头域的语法:
Trailer : field-name
Trailer 头字段中列出的消息头字段不得包含以下头字段:
传输编码 内容长度 预告片

传输编码

Transfer-Encoding 通用标头字段指示已对消息正文应用了什么类型的转换,以便在发送方和接收方之间安全地传输它。这与内容编码不同,因为传输编码是消息的属性,而不是实体正文的属性。 Transfer-Encoding 头域的语法如下:
Transfer-Encoding: chunked
所有传输编码值都不区分大小写。

升级

Upgrade 通用标头允许客户端指定它支持的附加通信协议,如果服务器发现它适合切换协议,则希望使用它。例如:
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
Upgrade 标头字段旨在提供一种从 HTTP/1.1 转换到其他不兼容协议的简单机制。

通过

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 : warn-code SP warn-agent SP warn-text SP warn-date

客户端请求标头

接受

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

接受字符集

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

接受编码

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

授权

Authorization 请求标头字段值包含凭据,其中包含所请求资源领域的用户代理的身份验证信息。一般语法是:
Authorization : credentials
HTTP/1.0 规范定义了 BASIC 授权方案,其中授权参数是 username:password 以 base 64 编码的字符串。以下是一个例子:
Authorization: BASIC Z3Vlc3Q6Z3Vlc3QxMjM=
解码后的值是 guest:guest123,其中 guest 是用户 ID, guest123 是密码。

饼干

Cookie 请求头字段值包含为该 URL 存储的名称/值对信息。以下是一般语法:
Cookie: name=value
可以指定多个 cookie 以分号分隔,如下所示:
Cookie: name1=value1;name2=value2;name3=value3

期待

Expect 请求头字段用于指示客户端需要一组特定的服务器行为。一般语法是:
Expect : 100-continue | expectation-extension
如果服务器收到包含其不支持的预期扩展的 Expect 字段的请求,它必须以 417(预期失败)状态响应。

来自

From 请求头字段包含控制请求用户代理的人类用户的 Internet 电子邮件地址。下面是一个简单的例子:
From: webmaster@w3.org
此标头字段可用于记录目的,并作为识别无效或不需要的请求来源的一种手段。

主持人

Host 请求头字段用于指定 Internet 主机和所请求资源的端口号。一般语法是:
Host : "Host" ":" host [ ":" port ] ;
A host 没有任何尾随端口信息意味着默认端口,即 80。例如,对 http://www.w3.org/pub 的原始服务器上的请求/WWW/ 将是:
GET /pub/WWW/ HTTP/1.1
Host: www.w3.org

如果匹配

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

代理授权

Proxy-Authorization 请求头字段允许客户端向需要身份验证的代理标识自己(或其用户)。这是一般语法:
Proxy-Authorization : credentials
Proxy-Authorization 字段值包含凭据,其中包含代理和/或请求资源领域的用户代理的身份验证信息。

范围

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.tutorialspoint.org/http/index.htm
如果字段值是相对 URI,则应相对于 Request-URI 进行解释。

TE

TE 请求头字段表明它愿意在响应中接受什么扩展 transfer-coding 以及它是否愿意接受分块 传输编码。以下是一般语法:
TE   : t-codings
关键字"trailers"的存在表明客户端愿意接受分块传输编码中的trailers字段,并指定以下任一方式:
TE: deflate
TE:
TE: trailers, deflate;q=0.5
如果 TE 字段值为空或不存在 TE 字段,则仅传输编码 分块。没有传输编码的消息总是可以接受的。

用户代理

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 响应头字段传达了发送方对自响应(或其重新验证)在源服务器上生成以来的时间量的估计。一般语法是:
Age : delta-seconds
年龄值是非负十进制整数,以秒为单位表示时间。下面是一个简单的例子:
Age: 1030
包含缓存的 HTTP/1.1 服务器必须在从其自己的缓存生成的每个响应中包含一个 Age 标头字段。

ETag

ETag response-header 字段提供所请求变体的实体标签的当前值。一般语法是:
ETag :  entity-tag
这里有一些简单的例子:
ETag: "xyzzy"
ETag: W/"xyzzy"
ETag: ""

位置

Location 响应头字段用于将接收者重定向到请求 URI 以外的位置以完成。一般语法是:
Location : absoluteURI
下面是一个简单的例子:
Location: http://www.tutorialspoint.org/http/index.htm
Content-Location 标头字段与 Location 的不同之处在于 Content-Location 标识包含在请求中的实体的原始位置。

代理验证

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

重试之后

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 : product | comment
下面是一个简单的例子:
Server: Apache/2.2.14 (Win32)
如果响应是通过代理转发的,代理应用程序不得修改服务器响应头。

设置-Cookie

Set-Cookie 响应头字段包含要为此 URL 保留的名称/值对信息。一般语法是:
Set-Cookie: NAME=VALUE; OPTIONS
Set-Cookie 响应头包含令牌 Set-Cookie,后跟一个或多个 cookie 的逗号分隔列表。以下是您可以指定为选项的可能值:
SN 选项和说明
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 : field-name
您可以指定多个以逗号分隔的标头,星号"*"表示未指定的参数不限于请求标头。下面是一个简单的例子:
Vary: Accept-Language, Accept-Encoding
此处的字段名称不区分大小写。

WWW-认证

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-coding
内容编码是由请求 URI 标识的实体的特征。下面是一个简单的例子:
Content-Encoding: gzip
如果原始服务器不接受请求消息中实体的内容编码,则服务器应以状态代码 415(不支持的媒体类型)进行响应。

内容语言

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

内容长度

Content-Length entity-header 字段表示实体主体的大小,以十进制的 OCTET 数表示,发送给接收者,或者在 HEAD 方法的情况下,实体的大小如果请求是 GET,则将发送的实体主体。一般语法是:
Content-Length : DIGITS
下面是一个简单的例子:
Content-Length: 3495
任何大于或等于零的 Content-Length 都是有效值。

内容位置

Content-Location 实体头字段可用于为消息中包含的实体提供资源位置,当该实体可从与请求资源的 URI 分开的位置访问时。一般语法是:
Content-Location:  absoluteURI | relativeURI 
下面是一个简单的例子:
Content-Location: http://www.tutorialspoint.org/http/index.htm
Content-Location 的值还定义了实体的基本 URI。

内容-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 : 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 实体头字段指示发送给接收者的实体主体的媒体类型,或者在 HEAD 方法的情况下,将被发送的媒体类型,如果请求是 GET。一般语法是:
Content-Type : media-type
以下是一个例子:
Content-Type: text/html; charset=ISO-8859-4

过期

Expires 实体标头字段给出了响应被视为陈旧的日期/时间。一般语法是:
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
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4