blog icon indicating copy to clipboard operation
blog copied to clipboard

HTTP缓存

Open renaesop opened this issue 8 years ago • 2 comments

首先,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禁止存储请求和响应中的任何部分。这个指令被用于privateshared的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

参考文献:

  1. HTTP/1.1规范 RFC7234

renaesop avatar May 24 '16 09:05 renaesop

新鲜度指的是什么?

mjjde avatar May 05 '17 03:05 mjjde

@mjjde that is, the client wants a response that will still be fresh for at least the specified number of seconds 新鲜度就是“还剩下的保质期”,也就是还有多久资源过期。

renaesop avatar May 05 '17 09:05 renaesop