HTTP通用首部字段
Cache-Control
Cache-Control通用消息头字段,被用于在 http 请求和响应中,通过指定指令来实现缓存机制。
eg: Cache-Control: private, max-age=0, no-cache[, 指令...]
常见请求指令
| 指令 | 参数 | 说明 |
|---|---|---|
| no-cache | - | 缓存服务器必须先进行有效性确认 |
| no-store | - | 不缓存请求或响应的任何内容 |
| max-age=[秒] | 必有 | 缓存存储的最大周期 |
常见响应指令
| 指令 | 参数 | 说明 |
|---|---|---|
| public | - | 可向任意方提供响应的缓存 |
| private | 可省略 | 向特定用户返回响应缓存 |
| no-cache | 可省略 | 缓存服务器不能对资源进行缓存 |
| no-store | - | 不缓存请求或响应的任何内容 |
| max-age=[秒] | 必有 | 缓存存储的最大周期 |
| must-revalidate | - | 可以缓存但必须要向源服务器进行确认 |
no-cache 与 no-store 的区别:
- no-cache并不是真正意义上的不缓存,缓存服务器会先对资源进行有效性确认再处理资源。
- no-store是真正意义上的不缓存,一般应用于请求或者响应含有机密内容
must-revalidate 和 no-cache 的区别:
- must-revalidate表示当资源没有过期(max-age)的时候,可以直接用缓存,但是过期了之后就一定要进行有效性确认
- no-cache表示一定要进行有效性确认,不管有没有过期
Connection
Connection作用:
- 控制不再转发给代理的首部字段
- 管理持久连接(
Connection: Keep-Alive,Connection: Close)
HTTP/1.1版本默认都是持久连接,因此客户端会在持久连接上连续发送请求,当服务器想明确断开连接时,则指定Connection首部字段为Close。
- 升级协议
使用Upgrade字段进行协议查询升级的时候,Connection: Upgrade
Upgrade
Upgrade字段用于检测协议是否可使用更高版本进行通信。
当报文中有Upgrade字段的时候,Connection字段的值为Upgrade。
对于有Upgrade字段的请求,服务器可用101 Switching Protocols状态码进行返回。
Via
Via字段用于追踪客户端于服务器之间的请求和响应报文的传输路径,还可避免请求回环。
报文经过代理或者网关的时候,会先在首部字段Via中附加该服务器的传输协议和信息。
请求首部字段
Accept-xxx
Accept
Accept字段用于表示客户端可以处理的媒体类型以及优先级。
eg: Accept: text/html, application/xhtml+xml, application/xml
Accept-Charset
Accept-Charset字段表示客户端可以支持的字符集以及优先级
eg:Accept-Charset: iso-8859-5, unicode-1-1
Accept-Encoding
Accept-Encoding字段表示客户端支持的内容编码以及优先级
Authorization
Authorization字段用于客户端向服务端传输认证信息
If-xxx
形如 If-xxx的请求字段都称为条件请求。服务器接收到附带条件的请求后,之后判断为指定条件为真时,才会执行请求。
If-Match
用于告知服务器匹配资源所用的实体标记(ETag)。服务器会对比If-Match的字段值和资源的ETag值,仅当两者一致时才会执行请求,否则返回412 Precondition Failed响应。还可用 * 号表示忽略ETag值,只要资源存在就处理请求。
If-None-Match
用于告知服务器匹配资源所用的实体标记(ETag)。服务器会对比If-Match的字段值和资源的ETag值,仅当两者不一致时才会执行请求。作用与If-Match相反。
If-Modified-Since
用于确认代理或者客户端拥有的本地缓存是否有效。如果If-Modified-Since的值早于资源的更新时间,则需要返回新的资源,并且服务器会返回Last-Modified字段供客户端更新;如果不早于资源更新时间(说明缓存有效),则服务器返回304 Not Modified响应。
If-Range
告知服务器若指定的If-Range字段值和请求资源的ETag值相一致时,则作为范围请求处理,反之,则返回全体资源。
Max-Forwards
通过 TRACE 方法 或者 OPTIONS方法,发送包含Max-Forward的请求时,这个字段限制了从客户端到服务端的转发路径的次数。
Range
Range: bytes=5001-10000
用于请求资源的一个部分。如果成功返回 206 Partial Content,如果失败则会返回 200 OK以及全部资源。
Referer
Referer: http://www.xxx.xx/xxx.html
用于告知服务器请求的原始资源的url。
响应首部字段
Accept-Ranges
Accept-Ranges: bytes, Accept-Ranges: none
用于告知客户端是否能处理范围请求。
ETag
ETag: "XXXXXXXXX"
是具体资源的唯一表示,服务器会为每份资源分配对应的ETag值。如果资源更新了,ETag的值也会随之更新。生成ETag值并没有统一的算法,根据服务器自己来定。
强ETag:无论资源发生多么细微的变化都会改变其值
弱ETag:只有资源发生了根本改变,才会改变其值,如果时弱ETag,会在值开始处附加 w/
Location
Location: http://xxxx.xx/xxx.html
用于表示新资源对应的URL。一般配合 3xx 的响应,为这个响应提供重定向的URL。
实体首部字段
Allow
Allow: GET, HEAD
表示服务器能够处理请求的方法。
Content
Content-Encoding
Content-Encoding: gzip
表示服务器对实体部分选用的内容编码方式(gzip,compress,deflate,identity)
Content-Language
Content-Language: zh-CN
告知客户端实体使用的自然语言
Content-Length
Content-Length: 15000
告知客户端实体主体部分的大小(以字节为单位)
Content-Type
Content-Type: text/html; charset=UTF-8
告知客户端主体内的媒体类型。
Expires
Expires: Wed, 04 Jul 2012 ...
告知客户端资源失效的日期。对于缓存服务器来说,Expires值指定的时间之前,资源副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送过来时,会请求源服务器的资源。
max-age的优先级高于expires
Last-Modified
告知客户端(或者是缓存服务器)资源最终被修改的时间。
和Cookie相关的首部字段
Set-Cookie
The
Set-CookieHTTP response header is used to send a cookie from the server to the user agent, so that the user agent can send it back to the server later. To send multiple cookies, multipleSet-Cookieheaders should be sent in the same response.
Set-Cookie的属性
- expires:指定cookie的有效期,如果省略这个属性,有效期仅限于维持浏览器会话时间内
- path:指定Cookie的发送范围和文件目录
- domain:限定了能够发送cookie的域名
- secure:仅在HTTPS时才可以发送cookie
- HttpOnly:不能通过js来获取cookie
Cookie
告诉服务器客户端拥有的cookie值,如果需要传多个cookie,就用多个Cookie头部。
Cookie: status=enable