"no-cache" 与 "max-age=0, must-revalidate, proxy-revalidate" 的区别

5

Cache-Control: no-cacheCache-Control: max-age=0, must-revalidate, proxy-revalidate 的 HTTP 响应有什么区别?

浏览器是否将它们视为相同?


1
语义上没有太大区别,只是更短而已。 - Mark Nottingham
1
@MarkNottingham,这在现实世界中也是成立的吗?浏览器真的将它们视为完全相同的吗? - Pacerier
我有一段时间没有测试了,但我相信是可以的。 - Mark Nottingham
1个回答

3

一般来说,不同的浏览器在HTTP缓存头方面的行为并不完全相同。

我记得有一个小差异(找不到来源,所以我不能百分之百确定这是确切的行为描述),那就是Chrome(好像是)把max-age=0视为您指定了max-age=10(假设行为差异足够小,但性能影响仍然很大)。

无论如何,以下是浏览器之间HTTP缓存行为差异的其他示例:

  • 一些浏览器会偏爱HTTP 1.0缓存头部(Pragma),另一些浏览器会更喜欢HTTP 1.1缓存头部
  • 一些浏览器(FF +?)不支持 no-store 指令,并将数据存储在加密缓存中
  • 某些浏览器忽略了在public后指定no-cache指令的情况,而其他浏览器则不会。
  • 当有 vary时,IE忽略max-age
  • 等等。

我的总体建议是使用Cache-Control: no-cache, must-revalidate, proxy-revalidatepragma: no-cache(HTTP 1.0)和Expires: 0这两个头部,以确保所有浏览器都不会缓存带有这些头的内容。


你是如何得到Chrome将 max-age=0 视为指定了 max-age=10 的信息的? - Pacerier
我记得这个,但我找不到来源。在我找到正确的来源之前,我会更新答案并保留意见。无论如何:我可以提供更多关于浏览器在HTTP缓存头方面表现不同的例子。 - Lior Bar-On

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