缓存控制不可变头部

7
我在阅读关于不可变头的文章时,遇到了这篇文章,其中提到:

Cache-Control: max-age=365000000, immutable

当支持不可变性的客户端看到这个属性时,它应该假定资源在服务器上未过期且未改变,因此不应发送条件重新验证(例如If-None-Match或If-Modified-Since),以检查更新。如果你担心不可变对象被损坏,纠正可能发生的损坏(例如Firefox中的Shift Reload)永远不会使用条件重新验证,但仍然有意义。

来源

我不能理解这个短语“如果未过期,则未在服务器上更改,因此不应发送条件重新验证”。

默认情况下,客户端在未达到最大年龄之前不会发送重新验证。

那么,定义不可变性的意义何在呢?

1个回答

9

用户不停地按下刷新按钮。

Facebook最先提出了这个不可变的缓存控制指令,并在这篇文章中写道,它如何帮助他们节省了大量的请求。其中包括以下引用:

重新加载的问题

浏览器的重新加载按钮是为了让用户获取当前页面的更新版本。为了实现此目标,当您重新加载时,浏览器会重新验证您当前所在的页面,即使该页面尚未过期。然而,他们还会进一步验证页面上的所有子资源,例如图像和JavaScript文件。


3
当我重新加载页面时,请求会命中缓存,因为它尚未过期。因此,没有重新验证发生,这就是为什么我不理解immutable的原因。 - George Paouris
2
取决于浏览器和刷新方法。建议在Firefox上尝试。Facebook使用缓存,因此它们从缓存中获取。其他网站在刷新时会得到304响应。 - Barry Pollard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接