我正在尝试使用 HTML5 Appcache 和 Rack::Offline 让 Rails 3 项目脱机工作。我正在使用 Rails 3 Asset Pipeline,它提供了额外的摘要(application-dfla33q23jad.js)来保持清单文件的新鲜。理论上,只要资产发生变化,清单也会发生变化以包含资产的新消化版本。
(应用程序清单)
CACHE MANIFEST
assets/application-785189fec63978372c177135a521e081.js
assets/application-c69de8169df1ae42a1a4dcafdc5a1af4.css
assets/application.css
assets/application.js
浏览器检测到新的清单,并且新的资产被缓存在后台,但是 html 没有得到更新以反映更新的资产。除了主条目之外,几乎所有资产都被缓存了。请注意下面的 js 和 css 链接如何与新版本没有相同的摘要,从而在刷新时导致 404(未找到)。
(index.html)
<html manifest="/application.manifest">
<head>
<title>Project</title>
<link href="/assets/application-cb58254cec63978372c177135a521e081.js" media="all" rel="stylesheet" type="text/css" />
<script src="/assets/application-918b26fdf1ae42a1a4dcafdc5a1af4.css" type="text/javascript"></script>
</head>
<body>
<p> Content </p>
</body>
</html>
解决此问题的第一个想法是将 html 显式添加到清单中,以便 html 与其余资产一起更新。
CACHE MANIFEST
index.html
assets/application-785189fec63978372c177135a521e081.js
assets/application-c69de8169df1ae42a1a4dcafdc5a1af4.css
assets/application.css
assets/application.js
我相信这会奏效,但 index.html 使用基本身份验证进行保护,因此在尝试更新 appcache 时会引发 401(未授权)错误。这引出了我的问题:
- appcache 不应该在显式条目更新时更新主条目(index.html)吗?
- appcache 是否提供了一种方法来包含使用基本身份验证保护的条目?
- appcache 请求不应该使用用户输入的相同凭据来查看页面吗?