【发布时间】:2014-05-21 00:06:21
【问题描述】:
我的问题与此类似,但提供的解决方案对我没有帮助:Force applicationCache to reload cached files
这是失败的。我目前在 S3 上托管了一个 sencha touch 应用程序,并且有一个问题需要更新 index.html 文件。
为了启用对应用程序的离线访问,我在 cache.appcache 中缓存了 index.html。下面是我的 cache.appcache 文件:
CACHE MANIFEST
# 127476e50461cf415c27fb33d81914faab1fc687
index.html
# 364c8e0f0cc7c9922d0019d083b4abba7d519e1c
resources/images/ajax-loader.gif
# 4028c1082f32387af25e2399aae7173ed0a51cf4
resources/images/cloud_download.png
# 40454710d633ca15b65d891d3842d3ef8b2136bf
resources/images/delete1.png
# 62c6a1ec578fa7d1d7a3117c2a84c5195c33ddb8
resources/images/loading.png
# ad85882c6285881966307da8da97ff597de9a486
resources/images/loadingbg.gif
# d2abb7549cd282c1e3fec6e9249d1e51ad5ec75d
resources/images/logo.png
FALLBACK:
NETWORK:
*
事后看来,为了启用离线访问,我可能应该将 index.html 保留为非缓存网络文件,并回退到一些“offline.html”文件,但该应用程序已经部署了一段时间,我需要对 index.html 进行更改,我就是无法更新文件,甚至无法通过清除缓存在我的本地计算机上更新,也不能通过上面链接使用隐私浏览。我需要能够更改文件,而无需用户执行任何操作来接收更改。
这是我尝试过的:
1) 我从缓存清单中删除了 index.html 并将其上传。当我这样做并重新加载时,浏览器会拾取更新的缓存清单并下载文件:
Application Cache Progress event (0 of 6) http://m.example.com/resources/images/loading.png (index):1
Application Cache Progress event (1 of 6) http://m.example.com/resources/images/ajax-loader.gif (index):1
Application Cache Progress event (2 of 6) http://m.example.com/resources/images/cloud_download.png (index):1
Application Cache Progress event (3 of 6) http://m.example.com/resources/images/loadingbg.gif (index):1
Application Cache Progress event (4 of 6) http://m.example.com/resources/images/delete1.png (index):1
Application Cache Progress event (5 of 6) http://m.example.com/resources/images/logo.png (index):1
Application Cache Progress event (6 of 6) http://m.example.com/ (index):1
谢天谢地,这意味着浏览器没有缓存清单文件,但不幸的是,即使它下载了索引,文件也没有更新。我已经确认文件已正确上传到 s3 存储桶,如果我下载文件,更改就在那里,但即使在重新加载浏览器、多次清除浏览器缓存后,查看源代码也会显示旧的 index.html 文件.请注意,如果我转到 http://m.example.com/?bla,它可以工作,所以我知道 s3 正在提供正确的文件(虽然我没有排除 s3 请求缓存),但 http://m.example.com/ 仍然损坏。
我猜测,虽然 appcache 正在重新下载文件,但在浏览器级别它仍然被缓存,所以 appcache 只是下载浏览器的缓存版本,尽管清除浏览器缓存并没有解决问题。
2) 我从未在 s3 中的文件上设置任何过期标头,因此不确定 s3 是否默认设置了非常长的过期标头,但我尝试将 Expires: -1 添加到 index.html 但没有帮助。
3) 我也尝试上传一个名为 index2.html 的新文件,并将 s3 存储桶中的索引文档更改为 index2.html,但我仍然得到旧副本。
我不仅需要让它在我的开发机器上运行,而且我还需要解决现有用户浏览器上的问题,理想情况下他们不必做任何事情。我开始认为我唯一的选择是更改应用程序网址,我真的不想这样做。索引页面似乎很难连接到浏览器中,我不确定将 m.example.com 指向一个新的 IP 地址是否会有所帮助。有人知道我该如何解决这个问题吗?
更新:我尝试在 chrome 控制台中查看网络选项卡,同时推送新的缓存清单并重新加载页面。不幸的是,即使重新下载缓存清单请求,它们似乎也不会显示在网络选项卡中。
【问题讨论】:
标签: amazon-s3 sencha-touch-2 browser-cache