【发布时间】:2013-09-12 17:42:45
【问题描述】:
我已经放弃了,但出于好奇,我想我会在这里发帖。
我所说的“硬刷新”是您在开发期间执行的 Ctrl+R 或 Shift+F5 以查看您的更改。
这会导致浏览器将Cache-Control: max-age=0 标头添加到请求和“子”请求,如图像和脚本等。
如果你在做你的工作,你会得到一个304,除了改变的资源。 (好吧,好吧,看看 cmets。这是假设其他验证器是基于浏览器缓存发送的。)
到目前为止,一切都很好。
问题是我不是直接从页面加载脚本,而是通过load.js,浏览器在这些请求中是否包含Cache-Control 标头不一致。 Chrome 根本不这样做,而 Firefox 似乎停在了一个系列的中间。
由于我无法访问当前请求的标头,因此无法知道是否应包含该标头。
结果是,当我更改脚本(load.js 除外)时,硬刷新无法可靠地工作,我必须清除浏览器缓存(这有点笨拙)。
对此有什么想法吗?
【问题讨论】:
-
我没有一个完整的答案,但是你可以对时间做些什么吗?例如。服务器延迟一个虚拟静态文件(例如带有
usleep(1000)的php)并查看它的加载速度。如果它在 -
如果您通过告诉我使用缓存来响应
Cache-control: max-age=0的请求,那么您没有完成您的工作。根据规范,必须遵守该标题。 -
@Pointy,好吧,很公平。即使
max-age=0,我仍然使用缓存副本,所以是的,这违反了规范。我认为这是避免不必要负载的常用方法。基本上我用它作为强制重新验证的一种方式(在重新验证可能很昂贵的情况下),而不是重新生成。 -
好吧,您正在对客户端是什么做出一些重大假设,这对于您的内容/站点/应用程序来说可能没问题。客户端可能没有拥有所请求资源的缓存副本。
-
@Pointy,对,我的意思是当其他验证器包含在
max-age=0中时,我会优先考虑它们,并且浏览器会在它们可用时发送所有这些验证器。 (对于静态内容,IIS 也是如此。)我也使用服务器端缓存来生成内容,即使max-age=0,如果我确定缓存相对于其源是最新的。在这些情况下,我当然会发送200和完整的回复。所以也许这不会违反规范。