HTTP 首部字段用于描述报文。
首部字段的格式特点:
_
:
以下报文形式 通用 表示请求头和响应头均可使用。
报文形式 | 首部字段名 | 说明 | 示例 |
---|---|---|---|
通用 | Date | 创建报文的日期时间 | Date: Tue, 15 Nov 2010 08:12:31 GMT |
请求头 | Origin | 请求页面的站点地址 | Origin: https://developer.mozilla.org |
Referer | 请求页面的完整 URL 地址 | Referer: https://developer.mozilla.org/en-US/docs/Web/JavaScript | |
Host | 请求要发送到的资源服务器的主机名和端口号 | Host: www.taobao.com | |
User-Agent | 用户代理软件的应用类型、操作系统、软件开发商以及版本号 | User-Agent: Mozilla/5.0 (Linux; X11) |
报文形式 | 首部字段名 | 说明 | 示例 |
---|---|---|---|
通用 | Keep-Alive | 允许消息发送者表示连接的状态,还可以用于设置超时时长和最大请求数 | |
Connection | 决定当前事务完成后,是否会关闭网络连接 | Connection: close |
如果取值为 keep-alive
,网络连接就是持久的,不会关闭,使用对同一服务器的请求可以继续在该连接上完成。
可取值:
keep-alive
:表明客户端想要保持该网络连接打开,HTTP/1.1 的请求默认使用一个持久连接。这个请求头列表由头部名组成,这些头将被第一个非透明的代理或者代理间的缓存所移除:这些头定义了发出者和第一个实体之间的连接,而不是和目的地节点间的连接。close
:表明客户端或服务器想要关闭该网络连接,这是 HTTP/1.0 请求的默认值Keep-Alive
是一个通用消息头,允许消息发送者暗示连接的状态,还可以用来设置超时时长和最大请求数。
语法:
Keep-Alive: parameters
一系列用逗号隔开的参数,每一个参数由一个标识符和一个值构成,并使用等号 =
隔开。下述标识符是可用的:
timeout
:指定空闲连接需要保持打开状态的最小时长(以秒为单位)。需要注意的是,如果没有在传输层设置 keep-alive
TCP message 的话,大于 TCP 层面的超时设置会被忽略。max
:在连接关闭之前,在此连接可以发送的请求的最大值。在非管道连接中,除了 0
以外,这个值是被忽略的,因为需要在紧跟着的响应中发送新一次的请求。HTTP 管道连接则可以用它来限制管道的使用。使用示例:
HTTP/1.1 200 OKConnection: Keep-AliveContent-Encoding: gzipContent-Type: text/html; charset=utf-8Date: Thu, 11 Aug 2016 15:23:13 GMTKeep-Alive: timeout=5, max=1000Last-Modified: Mon, 25 Jul 2016 04:32:39 GMTServer: Apache
HTTP 请求启动 KeepAlive 需要服务端配合,Nginx 配置:
http {# 客户端连接在服务器端保持开启的超时值keepalive_timeout 120s 120s;# 可以服务的请求的最大数量keepalive_requests 10000;}
报文形式 | 首部字段名 | 说明 | 示例 |
---|---|---|---|
请求头 | Accept | 用于告知服务器客户端可处理的 媒体类型 | Accept: text/plain, text/html |
Accept-Charset | 用于告知服务器客户端可处理的 字符集类型 | Accept-Charset: utf-8, iso-8859-5 | |
Accept-Encoding | 用于告知服务器客户端可处理的 内容编码方式 | Accept-Encoding: gzip, deflate, br | |
Accept-Language | 用于告知服务器客户端可处理的 自然语言 | Accept-Language: en,zh | |
响应头 | Content-Type | 用于指示资源的 媒体类型(MIME 类型) | Content-Type: text/html; charset=utf-8 |
Content-Encoding | 用于指示资源的 编码方式 | Content-Encoding: gzip | |
Content-Language | 用于指示资源的 自然语言 | Content-Language: en,zh | |
Content-Length | 用于指示资源的 体积大小(单位:字节) | Content-Length: 348 | |
Content-Location | 用于指示要访问的资源通过内容协商后的 URL | Content-Location: /index.htm | |
Content-Range | 表示数据片段在整个文件中的位置 | Content-Range: bytes 21010-47021/47022 |
当然一般这些数据都是会进行编码压缩的,采取什么样的压缩方式就体现在了发送方的 Content-Encoding 字段上, 同样的,接收什么样的压缩方式体现在了接受方的 Accept-Encoding 字段上。这个字段的取值有下面几种:
gzip
:当今最流行的压缩格式deflate
:另外一种著名的压缩格式br
:一种专门为 HTTP 发明的压缩算法<!-- 发送端 -->Content-Encoding: gzip;<!-- 接收端 -->Accept-Encoding: gzip
在响应中,Content-Type
用于告知客户端实际返回的内容的内容类型。
指令:
media-type
:资源或数据的 MIME 类型charset
:字符编码标准boundary
:用于封装消息的多个部分的边界报文形式 | 首部字段名 | 说明 | 示例 |
---|---|---|---|
请求头 | Access-Control-Request-Headers | (预检请求)列出正式请求中允许的首部信息 | Access-Control-Request-Headers: * |
Access-Control-Request-Method | (预检请求)列出正式请求中允许的请求方法 | Access-Control-Request-Method: * | |
响应头 | Access-Control-Allow-Credentials | 表示是否可以将对请求的响应暴露给页面 | Access-Control-Allow-Credentials: true |
Access-Control-Allow-Headers | (预检请求)列出正式请求中允许的首部信息 | Access-Control-Allow-Headers: * | |
Access-Control-Allow-Methods | (预检请求)列出正式请求中允许的请求方法 | Access-Control-Allow-Methods: * | |
Access-Control-Allow-Origin | (预检请求)列出正式请求中允许的域名 | Access-Control-Allow-Origin: https://developer.mozilla.org | |
Access-Control-Expose-Headers | (预检请求)列出正式请求中哪些首部可以暴露 | Access-Control-Expose-Headers: Content-Length, X-Kuma-Revision | |
Access-Control-Max-Age | (预检请求)列出正式请求中 Access-Control-Allow-Headers 和 Access-Control-Allow-Methods 缓存时间 | Access-Control-Max-Age: 600 |
报文形式 | 首部字段名 | 说明 | 示例 |
---|---|---|---|
通用 | Cache-Control | 表示资源的缓存策略 | Cache-Control: no-cache |
请求头 | If-Modified-Since | 比较资源的更新时间 | If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
If-Match | 比较实体标记(ETag) | If-Match: “737060cd8c284d8af7aD3082f209582d” | |
If-None-Match | 比较实体标记(与 If-Match 相反) | If-None-Match: “737060cd8c284d8af7ad3082f209582d” | |
If-Range | 资源未更新时发送实体 Byte 的范围请求 | If-Range: “737060cd8c284d8af7ad3082f209582d” | |
If-Unmodified-Since | 比较资源的更新时间(与 If-Modified-Since 相反) | If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT | |
响应头 | Expires | 表示资源的过期时间 | Expires: Thu, 01 Dec 2010 16:00:00 GMT |
Last-Modified | 表示服务器认定资源最后的修改时间 | Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT | |
ETag | 请求变量的实体标签的当前值 | ETag: “737060cd8c284d8af7ad3082f209582d” |
报文形式 | 首部字段名 | 说明 | 示例 |
---|---|---|---|
通用 | Via | 代理服务器的相关信息 | Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
请求头 | Authorization | 用于验证用户代理身份的凭证 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Proxy-Authorization | 代理服务器对客户端的认证信息 | Proxy-Authenticate: Basic realm="Access to the internal site" | |
响应头 | WWW-Authenticate | 服务器对客户端的认证信息 | WWW-Authenticate: Basic |
Proxy-Authenticate | 用于指定代理服务器上的资源访问权限而采用的身份验证方式 | Proxy-Authenticate: Basic realm="Access to the internal site" |
首部字段名 | 说明 | 示例 |
---|---|---|
Allow | 资源可支持的 HTTP 方法 | Allow: GET,HEAD |
Trailer | 报文末端的首部一览 | Trailer: Max-Forwards |
Transfer-Encoding | 指定报文主题的传输编码方式 | Transfer-Encoding:chunked |
Location | 用来重定向接收方到非请求 URL 的位置来完成请求或标识新的资源 | Location: http://www.leixuesong.cn/724 |
Retry-After | 如果实体暂时不可取,通知客户端在指定时间之后再次尝试 | Retry-After: 120 |
Server | Web 服务器的安装信息 | Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |