Chrome和Firefox不会清除通过mod_rewrite提供的文档的缓存

时间:2014-06-27 16:59:12

标签: apache google-chrome mod-rewrite browser-cache

让Chrome和Firefox清除我通过mod_rewrite提供的文档的缓存版本时遇到了很多麻烦。也就是说,我无法让Chrome或Firefox返回服务器获取修改后的版本。

以下是Chrome开发者工具网络面板中的内容:

Headers according to Chrome

当我使用curl从命令行发出请求时,查看我的服务器发回的标头,这是我得到的:

enter image description here

/使用此重写规则将/ Dashboard重写为/index.html:

RewriteBase / RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.html [L,QSA]

我已经尝试过将我的文档从Chrome的缓存中取出的所有想法,但无济于事。任何帮助表示赞赏。

更新:以下是隐身模式下该页面的另一个屏幕截图。我通过dev工具打开禁用缓存,清除了缓存,并且隐身模式处于活动状态。我仍然从缓存中获取第一页。

enter image description here

1 个答案:

答案 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。