HTTP头Headers的那些事

HTTP 消息头允许客户端和服务器通过 requestresponse传递附加信息。一个请求头由名称(不区分大小写)后跟一个冒号“:”,冒号后跟具体的值(不带换行符)组成。该值前面的引导空白会被忽略。目前很对人自定专用消息头都是通过'X-' 前缀来添加。

最基本的消息头分有:

  • General headers: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。
  • Request headers: 包含更多有关要获取的资源或客户端本身信息的消息头。
  • Response headers: 包含有关响应的补充信息,如其位置或服务器本身(名称和版本等)的消息头。
  • Entity headers: 包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型。

General header(通用首部)

通用首部指的是可以应用于请求和响应中,但是不能应用于消息内容自身的HTTP 首部 。 取决于应用的上下文环境,通用首部可以是响应头部或者请求头部。但是不可以是实体头部。

最常见的通用首部包括:DateCache-ControlConnection

Date:其中包含了报文创建的日期和时间。

Cache-Control :被用于在http请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中。

Connection :决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成。

Request header(请求头)

请求头(Request header)它可在 HTTP 请求中使用,并且和请求主体无关 。某些请求头如 AcceptAccept-*If-*允许执行条件请求。某些请求头如:Cookie, User-AgentReferer描述了请求本身以确保服务端能返回正确的响应。

并非所有出现在请求中的 HTTP 首部都属于请求头,例如在POST请求中经常出现的Content-Length实际上是一个代表请求主体大小的entity header实体头,虽然你也可以把它叫做请求头。

下面是一个 HTTP 请求的请求头:

GET /home.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/testpage.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT
If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"
Cache-Control: max-age=0

Response header 响应头

响应头(Response header) 可以定义为:被用于http响应中并且和响应消息主体无关的那一类HTTP header。像Age, LocationServer都属于响应头,他们被用于描述响应。

并非所有出现在响应中的http header都属于响应头,例如Content-Length就是一个代表响应体消息大小的entity header,虽然你也可以把它叫做响应头。

下面展示了一个 GET请求的响应头。需要注意的是,严格来说Content-EncodingContent-Type都是属于entity headers

200 OK
Access-Control-Allow-Origin: *
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Mon, 18 Jul 2016 16:06:00 GMT
Etag: "c561c68d0ba92bbeb8b0f612a9199f722e3a621a"
Keep-Alive: timeout=5, max=997
Last-Modified: Mon, 18 Jul 2016 02:36:04 GMT
Server: Apache
Set-Cookie: mykey=myvalue; expires=Mon, 17-Jul-2017 16:06:00 GMT; Max-Age=31449600; Path=/; > > > secure
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
X-Backend-Server: developer2.webapp.scl3.mozilla.com
X-Cache-Info: not cacheable; meta data too large
X-kuma-revision: 1085259
x-frame-options: DENY

实体报头

实体报头是描述了一个 HTTP 消息有效载荷(即关于消息主体的元数据)的 HTTP 报头。实体报头包括Content-LengthContent-LanguageContent-EncodingContent-TypeExpires等。实体报头可能同时存在于 HTTP 请求和响应信息中。

尽管实体报头既非请求或响应报头,(由于它经常出现在请求头或响应头中)它们通常包含于此类概念中。

在下面的例子中,Content-Length是实体报头,而 HostUser-Agent是请求报头。

POST /myform.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Content-Length: 128

最后修改:2021 年 08 月 27 日 05 : 43 PM
如果觉得我的文章对你有用,请随意赞赏