HTTP 中的缓存介绍
首先,HTTPS 的缓存和 HTTP 的缓存策略是相同的,都是由 HTTP 响应头决定。
Cache-Control
请求头和响应头都可以设定该字段,用于控制缓存链的行为;这是个单向指令,也就是请求和响应头中的 Cache-Control
独立控制请求和响应;不管代理能不能理解这些指令都应该原封不动地传递。 Age
是与之紧密相关的字段,表示响应由源站生成或确认的时间与当前时间的差值。指令如下:
请求
1. max-age
简而言之,指定保质期的指令。 max-age
指令标示了客户端不愿意接收一个 age
大于设定时间的响应。除非还指定了 max-stale
,否则客户端是不会接收过期的响应的。
某些浏览器(比如Firefox)中如果设定为永不缓存,那么其发出的请求中,请求头会包含 max-age=0
。
2.max-stale
字面意思,能容忍的最大过期时间。 max-stale
指令标示了客户端愿意接收一个已经过期了的响应。如果指定了 max-stale
的值,则最大容忍时间为对应的秒数。如果没有指定,那么说明浏览器愿意接收任何 age
的响应。
暂时没有发现比较常见的使用场景。
3.min-fresh
设定能够容忍的最小新鲜度。 min-fresh
标示了客户端不愿意接受新鲜度不多于当前的 age
加上 min-fresh
设定的时间之和的响应。
4.no-cache
no-cache
指令标示了缓存链禁止返回一个未经源站验证的缓存响应。
已知的是 Chrome 勾掉 disable cache
之后,所用的请求都会带有这个字段。可惜的是这个指令对于CDN来说,往往没有什么用处,并不会回源,可能是CDN并不认为自己是个代理。
5.no-store
cache禁止存储请求和响应中的任何部分。这个指令被用于 private
和 shared
的cache中。“禁止存储”在这个上下文中是指cache禁止在非易失存储设备中存储信息,并且必须尽最大努力在转发请求/响应之后移除这些信息。
这个指令并不是一个可靠和有效保证隐私的措施。特别是,恶意的或者妥协的cache并不会识别或者遵守这个指令,并且互联网通信是很可能被窃听。
啊哈,如果运营商啥的遵守这个指令,就不会有信息贩卖这回事了。
6.no-transform
禁止中间人更改payload(请求体)。
7.only-if-cached
只要缓存的内容。 only-if-cached
请求指定指示了客户端指向获取一个缓存的响应。如果接收到这个指定,cache应该要么用缓存的内容给出响应,要么给出一个504(GateWay Timeou)响应码。如果一组cache被作为一个内部相连的系统,那么其中的某个成员可以向这个缓存组里请求响应。
响应
1.must-revalidate
cache在响应不新鲜,必须回源。 must-revalidate
响应指定,一旦内容过期,cache禁止在没有和源站确认情况下,使用响应来返回给后续请求。
这个指令对于支持某些协议的可靠操作是必要的。所有情况下,cache必须遵守这个指令;特别地,如果cache因为某些原因无法到达源站,它必须产生一个504响应。
这个指令当且仅当被服务器用于,如果未能验证一个呈现的请求会导致错误操作的场合,例如一个一个沉默地失败的金融交易。
2.no-cache
禁止返回未被源站验证的内容。这个指令允许源站阻止cache在不回源的情况下响应请求,甚至是在cache设定发送过期响应的情况下。
如果 no-cache
响应指令指定了一个或者多个字段名,那么cache可能会使用这个响应来处理后续请求。然而,任意出现在列表中的头部字段在没有回源的情况下是禁止发给客户端的。
这个指令使得在利用缓存的情况下,也可以使得头部字段有所不同,例如 Set-Cookie
头部。
3.no-store
跟请求头中的no-store一致
4.no-transform
跟请求头中一致
5.public
参考文献 HTTP/1.1 规范 RFC7234
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 用 DOM 与 CSS 展示二叉树
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
@mjjde that is, the client wants a response that will still be fresh for at least the specified number of seconds
新鲜度就是“还剩下的保质期”,也就是还有多久资源过期。
新鲜度指的是什么?