强制重新下载缓存为cache.appcache的文件

时间:2014-04-08 10:42:29

标签: amazon-s3 sencha-touch-2 browser-cache

我的问题与此类似,但提供的解决方案对我没有帮助: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中的文件上设置任何expires头,所以不确定s3默认情况下是否设置了很长的过期头,但我尝试将expires:-1添加到index.html但没有帮助。 / p>

3)我还尝试上传一个名为index2.html的新文件,并将s3存储桶中的索引文档更改为index2.html,但我仍然得到旧版本。

我不仅需要在我的开发机器上使用它,而且我还需要在现有用户的浏览器上解决问题,理想情况是不需要他们做任何事情。我开始认为我唯一的选择就是更改应用程序网址,我真的不想这样做。索引页面似乎很难连接到浏览器我不确定是否将m.example.com指向新的IP地址会有所帮助。任何人都有任何想法如何解决这个问题?

更新:我尝试查看Chrome控制台中的网络选项卡,同时推送新的缓存清单并重新加载页面。不幸的是,缓存清单请求似乎没有显示在网络选项卡中,即使它们正在被重新下载。

1 个答案:

答案 0 :(得分:1)

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

My HTML5 Application Cache Manifest is caching everything

执行此操作后,为避免将来出现缓存问题,我在“offline.html”上创建了一个重复页面,并将index.html指向offline.html。因此,基本上index.html现在从未被缓存,并且不会让我陷入无法使用的域,并且当离线时它将重定向到离线页面,可以愉快地缓存以进行离线访问。呼!