让Chrome和Firefox清除我通过mod_rewrite提供的文档的缓存版本时遇到了很多麻烦。也就是说,我无法让Chrome或Firefox返回服务器获取修改后的版本。
以下是Chrome开发者工具网络面板中的内容:
当我使用curl从命令行发出请求时,查看我的服务器发回的标头,这是我得到的:
/使用此重写规则将/ Dashboard重写为/index.html:
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.html [L,QSA]
我已经尝试过将我的文档从Chrome的缓存中取出的所有想法,但无济于事。任何帮助表示赞赏。
更新:以下是隐身模式下该页面的另一个屏幕截图。我通过dev工具打开禁用缓存,清除了缓存,并且隐身模式处于活动状态。我仍然从缓存中获取第一页。
答案 0 :(得分:0)
以下是它的原因:我正在使用此处所述的“清单”文件:
https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache
在我的构建中,我有一个新的VERSION和BUILD行分别使用git commit id和build number填充,我从Jenkins获得。
但是,我正在查看本地构建,并且我设置此文件的方式是为版本编写“未定义”并在每个构建时构建,因此文件的内容不会更改。
浏览器可以看到文件没有变化,因此没有理由认为它有一个过时的index.html版本。
我更新了我的grunt构建,以便在Jenkins环境变量不存在时放入时间戳,并解决了大部分问题。现在,当我加载我的应用程序时,一旦浏览器看到我的清单已更改,index.html的缓存版本就会失效。问题是我现在正在查看一个陈旧版本的index.html,所以我的整个会话将在index.html的过时版本上。
当我刷新时,我会获得index.html的新版本。
计划是放入一个javascript函数并获取我的清单文件,拉出版本,并将其存储在cookie中。然后在页面加载时我将它与已经在cookie中的内容进行比较,如果它们不匹配(新版本的应用程序),我将使用top.location.reload()来获取最新的index.html。