为什么在请求标头(客户端到服务器)中发送Cache-Control属性?


163

在了解Cache-Control了HTTP标头的字段之后,

据我所知,Cache-Control在HTTP响应报头(服务器到客户端)字段指定如何处理该响应的中间代理服务器/客户浏览器中的指令,通过发送不同的值Cache-Control字段:privatepublicno-cache,或no-store在响应报头中。

但是我不明白为什么我们需要Cache-Control在请求标头(客户端到服务器)中发送属性?

Answers:


137

Cache-Control: no-cache通常用于请求标头(从Web浏览器发送到服务器)中,以强制验证中间代理中的资源。如果客户端没有将此请求发送到服务器,则中间代理将返回内容的副本(如果内容是最新的(根据Expiremax-age字段尚未过期))。Cache-Control指示这些代理重新验证副本,即使该副本是新鲜的也是如此。


8
在这里可能为时已晚,但除了其他用途还有什么?是否将max-age字段用于任何目的?
山姆

为什么现代浏览器倾向于这样做?他们不信任中间代理,即使他们按照网络标准行事?
rogerdpack

1
@rogerdpack不,因为他们确实信任它们,所以他们会发送值得信任的标头,以表明他们有一些特殊的原因需要比大多数用途需要更多的新鲜度。
乔恩·汉娜

1
@rogerdpack如果您刚刚做过一些您知道会改变状态并想要反映出来的事情,那将是一个经典案例。
乔恩·汉纳

7
@JonHanna也许您已在Chrome开发者工具中选中了“禁用缓存”?:D
格雷戈里·玛格沙克(Alex Gregory Magarshak),

15

客户端可以Cache-Control在请求中发送标头,以便沿着请求路径从源服务器和任何中间代理服务器请求特定的缓存行为,例如重新验证。


4

除了上述答案外,
可能还有一个实现缓存链接的设置。在这种情况下,如果请求到达了不满足的第一个缓存,则它可能会转到进一步链接的缓存。

因此,为了始终从服务器获取响应,我们在请求标头中包含了缓存控制。这将确保响应始终来自服务器。


您说:“因此,为了始终从服务器获取响应,我们在请求标头中包含了缓存控制。这将确保响应始终来自服务器。” 此标头的什么值可以实现?
唐·哈奇

Cache-Control: no-cache会告诉代理人确保对响应进行全面验证。
mogsie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.