我使用.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
扩展名后,将文件名从manifest.appcache
更改为app.manifest
。
我现在看到(特别是在Chrome中)浏览器没有重新获取HTML源,所以没有看到清单文件已经改变,所以没有加载新的app.manifest
文件,并且无法下载任何源。/index
HTML文件的缓存头(Expires
, ETag
和Last-Modified
)都改变了,文件的内容也改变了,但Chrome拒绝重新获取HTML,除非通过devtools禁用缓存。
有谁知道为什么Chrome是如此积极地持有这些缓存的HTML?有什么办法让它重新取回吗?
确保/manifest。Appcache返回404,这让浏览器明白它现在已经过时了,他们会删除所有本地缓存并在下次重新加载页面,所以他们会在新的位置获得它。
您需要对旧的清单文件(manifest.appcache
)进行更改。你的/index
文件是appcache的一部分,它仍然被Chrome使用。
来自HTML5推荐:
注意:也鼓励作者在manifest中包含主页,但实际上,引用清单的页面是自动的缓存,即使没有明确提到。
Chrome得到旧的清单,没有变化,所以它继续。尝试添加一个随机注释到manifest.appcache
,然后再试一次。