【问题标题】:Force re-download of file cached with cache.appcache强制重新下载使用 cache.appcache 缓存的文件
【发布时间】: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


    【解决方案1】:

    好的,经过一番搜索后,我发现了 appcache 中的一些特性,例如,无论您的设置如何,无论您的缓存清单包含什么页面,默认情况下都会自动缓存。我原以为,如果更新清单,浏览器至少会重新下载 index.html,但似乎没有。我使用了以下链接中的解决方案,该解决方案指示了一种解决方法,您可以将清单附加到您通过 iframe 在源页面中引用的另一个页面,因此不会再次缓存 index.html。

    My HTML5 Application Cache Manifest is caching everything

    之后,为了避免将来出现缓存问题,我在“offline.html”处创建了一个重复页面,并进行了故障转移,将 index.html 指向了offline.html。所以基本上 index.html 现在永远不会被缓存并且不会让我陷入无法使用的域,并且在离线时它将重定向到离线页面,该页面可以愉快地缓存以供离线访问。呸!

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多