通用首部字段是指请求报文和响应报文双方都会使用的首部。
- Cache-Control
通过指定首部字段Cache-Control的指令能操作缓存的工作机制。
Client: 如果有新缓存请给我~
Server: 我希望你不要对此做缓存......
指令的参数是可选的,多个指令之间通过,分割。
Cache-Control: private, max-age=0, no-cache
缓存请求指令
| 指令 | 参数 | 说明 |
|---|---|---|
no-cache | 无 | 强制向源服务器再次验证 |
no-store | 无 | 不缓存请求或响应的任何内容 |
max-age | 必需 | 响应的最大Age值 |
max-stale | 可省略 | 接受已过期的响应 |
min-fresh | 必需 | 期望在指定时间内的响应仍有效 |
no-transform | 无 | 代理不可更改媒体类型 |
only-if-cached | 无 | 从缓存获取资源 |
cache-extension | - | 新指令标记(token) |
缓存响应指令
| 指令 | 参数 | 说明 |
|---|---|---|
public | 无 | 可向任意方提供响应的缓存 |
private | 可省略 | 仅向特定用户返回响应 |
no-cache | 可省略 | 缓存前必须先确认其有效性 |
no-store | 无 | 不缓存请求或响应的任何内容 |
no-transform | 无 | 代理不可更改媒体类型 |
must-revalidate | 无 | 可缓存但必须再向源服务器进行确认 |
proxy-revalidate | 无 | 要求中间缓存服务器对缓存的响应有效性再进行确认 |
max-age | 必需 | 响应的最大Age值 |
s-maxage | 必需 | 公告缓存服务器响应的最大Age值 |
cache-extension | - | 新指令标记(token) |
当使用s-maxage指令后直接忽略对Expires首部字段及max-age指令的处理。
应用HTTP/1.1版本的缓存服务器遇到同时存在Expires首部字段的情况时,会优先处理max-age指令,而忽略掉Expires首部字段。
使用must-revalidate指令会忽略请求的max-stale指令。
- Connection
Connection首部字段具备两个作用:控制不再转发给代理的首部字段、管理持久连接。
Connection: 不再转发的首部字段名/close
HTTP/1.1版本的默认连接都是持久连接。
- Date
HTTP/1.1协议使用在RFC1123中规定的日期时间的格式:
Date: Tue, 11 Jun 2019 18:12:57 GMT
- Pragma
Pragma是HTTP/1.1之前版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容而定义。
规范定义的形式唯一: Pragma: no-cache。
该首部字段属于通用首部字段,但只用于在客户端发送的请求中。客户端要求所有的中间服务器不返回缓存的资源。
Client: 我不接受缓存
- Trailer
Client: 在报文的最后写了很重要的东西,记得要仔细阅读哦
该首部字段可应用在HTTP/1.1版本分块传输编码时。
- Transfer-Encoding
Client: 用这种传输编码方式发送哦
HTTP/1.1的传输编码方式仅对分块传输编码有效。
- Upgrade
Client: 能让我使用这个协议吗?
使用首部字段Upgrade时还需要额外指定Connection: Upgrade。Upgrade首部字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间。
- Via
使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径。首部字段Via不仅用于追踪报文的转发,还可避免请求回环的发生。所以必须在经过代理时附加该首部字段内容。
Via首部是为了追踪传输路径,所以经常会和TRACE方法一起使用。
- Warning
HTTP/1.1的Warning首部是从HTTP/1.0的响应首部(Retry-After)演变过来的。
Warning首部的格式如下: Warning: [警告码][警告的主机: 端口号]"[警告内容]"([日期时间])。
HTTP/1.1中定义了7种警告。
| 警告码 | 警告内容 | 说明 |
|---|---|---|
| 110 | Response is stale | 代理返回已过期的资源 |
| 111 | Revalidation failed | 代理再验证资源有效性时失败(服务器无法到达等原因) |
| 112 | Disconnection operation | 代理与互联网连接被故意切断 |
| 113 | Heuristic expiration | 响应的使用期超过24小时(有效缓存的设定时间大于24小时的情况下) |
| 199 | Miscellaneous warning | 任意的警告内容 |
| 214 | Transformation applied | 代理对内容编码或媒体类型等执行了某些处理时 |
| 299 | Miscellaneous persistent warning | 任意的警告内容 |
(最近更新:2019年09月18日)
本文深入解析HTTP协议中缓存控制机制,涵盖通用首部字段Cache-Control的指令及其参数,如no-cache、no-store、max-age等,以及它们在客户端和服务端的应用。同时介绍了Connection、Date、Pragma、Trailer、Transfer-Encoding、Upgrade、Via和Warning等其他通用首部字段的作用。
161

被折叠的 条评论
为什么被折叠?



