Chrome 使用 .manifest 文件积极缓存 HTML

Chrome aggressively caching HTML with .manifest file

我正在使用 .manifest 文件来告诉浏览器缓存哪些资源。主要包含以下内容:

CACHE MANIFEST
# This manifest was generated by grunt-manifest HTML5 Cache Manifest Generator
# Time: Fri Jul 24 2015 09:57:13 GMT+0100 (BST)

CACHE:
app.min.js
app.min.css
js/libs/require-min.js
img/leaf.png

NETWORK:
*

此文件在 HTML 中的链接如下:

<!DOCTYPE html>
<html manifest="/app.manifest">
    <head>
        <style type="text/css" media="all">
    ....

根据 Safari 用户的报告,他们的 UI 不尊重缓存文件,在阅读 Safari 需要清单文件后,我将文件名从 manifest.appcache 更改为 app.manifest .manifest 扩展。

我现在看到(尤其是在 Chrome 中)浏览器没有 re-fetched HTML 源,所以没有看到清单文件已更改,所以没有加载新的 app.manifest 文件,并且无法下载任何源代码。 /index HTML 文件的缓存 headers(ExpiresETagLast-Modified)以及文件内容都已更改, 然而 Chrome 拒绝 re-fetch HTML 除非通过 devtools 禁用缓存。

有谁知道为什么 Chrome 如此积极地保留这个缓存的 HTML?关于如何将其发送到 re-fetch 的任何想法?

您需要更改旧清单文件 (manifest.appcache)。您的 /index 文件是应用缓存的一部分,并且 Chrome 仍在使用它。

来自HTML5 recommendation

Note: Authors are encouraged to include the main page in the manifest also, but in practice the page that referenced the manifest is automatically cached even if it isn't explicitly mentioned.

Chrome 获取旧清单并且没有任何更改,因此它继续。尝试向 manifest.appcache 添加随机评论,然后重试。

确保 /manifest.appcache returns 一个 404,这就是让浏览器明白它现在已经过时的原因,他们将删除所有本地缓存​​并在下次重新加载页面,所以他们会得到它在新的位置。