揭开HTTP网络协议神秘面纱系列(三)(1)(2)
HTTP首部字段将定义成缓存代理和非缓存代理两种类型:
端到端(End-to-end Header):此类中的首部字段会转发给请求/响应对应的最终接受目标,且必须在由缓存生成的响应中,另外规定它必须被转发。
逐跳首部(Hop-by-hop Header):此类中的首部只对单次转发有效,会因通过缓存或代理而不再转发。如:Connection,Keep-Alive,Upgrade,Proxy-Authenticate,Proxy-Authorization等。
当有多个指令参数时,多个指令之间可通过”,”分隔,例如首部字段Cache-Control:
Cache-Control: private,max-age=0,no-cache
Cache-Control指令一览:
缓存请求指令:
指令 | 参数 | 说明 |
---|---|---|
no-cache | 无 | 强制向源服务器再次验证 |
no-store | 无 | 不缓存请求或响应的任何内容 |
max-age=[秒] | 必需 | 响应的最大Age值 |
max-stale=[秒] | 可省略 | 接受已过的响应 |
min-fresh=[秒] | 必需 | 期望在指定时间内的响应仍有效 |
no-transform | 无 | 代理不可更改媒体类型 |
only-if-cache | 无 | 从缓存获取资源 |
cache-extension | - | 新指令标记 |
缓存响应指令:
指令 | 参数 | 说明 |
---|---|---|
public | 无 | 可向任意方提供响应的缓存 |
private | 可省略 | 仅向特定用户返回响应 |
no-cache | 可省略 | 缓存前必须先确认其有效性 |
no-store | 无 | 不缓存请求或响应的任何内容 |
no-transform | 无 | 代理不可更改媒体类型 |
msut-revalidate | 无 | 可缓存但必须再向源服务器进行确认 |
proxy-revalidate | 无 | 要求中间缓存服务器对缓存的响应有效性再进行确认 |
max-age=[秒] | 必需 | 响应的最大Age值 |
s-maxage=[秒] | 必需 | 公共缓存服务器响应的最大Age值 |
cache-extension | - | 新指令标记[token] |
Connection首部字段有两个作用:
控制不再转发给代理的首部字段,如:Connection:不再转发的首部字段名.
管理持久化连接,HTTP/1.1默认是持久连接,如果想断开连接,可以用Connection: Close.
首部字段Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议,不过产生对象仅限于客户端和邻接服务器之间。
首部字段Warning来告知用户一些与缓存相关的问题的警告,其格式:Warning:[警告码][警告的主机:端口号][警告内容]([日期时间])。
警告码:
警告码 | 警告内容 | 说明 |
---|---|---|
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持久杂项警告) | 任意的警告内容 |
评论暂时关闭