IOS6移动网络应用缓存HTML

时间:2012-09-25 08:22:52

标签: html5 ios6

我们将移动网络应用保存到主屏幕。使用带有jquery mobile的单页HTML文件对应用程序进行编码。

在iOS5及更低版本中,设备不会缓存index.html文件,因此每次启动应用程序时,设备都会请求HTML页面。这非常重要,因为我们有另一个应用程序处理位于我们服务器前面的身份验证,因此我们依赖于302 http代码,这导致重定向进行身份验证。如果成功,则会将另一个重定向发回到我们的index.html页面。

在iOS6中,尽管我们设置了无缓存控制头,但是看起来index.html文件已缓存了!这是一个问题,因为我们无法进行身份验证,因此当用户开始使用该应用程序时,所有请求都会失败(它们是未经过身份验证的)。

我似乎无法找到这是否是iOS6中实现的功能的任何细节。有人对此有所了解吗?我知道他们对缓存有点疯狂(缓存帖子回复)......

注意:理解认证的解决方案并不理想,但我们目前无法改变。只是在寻找关于苹果做了什么导致这个错误的参考资料!

更新

使用Charles Web Debugging Proxy后发现了一些有趣的事情,服务器正在使用Cache-Control:private进行响应,这意味着代理不会缓存,但浏览器会缓存。这提出了一个问题,即iOS 6主屏幕移动网络应用程序现在是否真正正确地处理了这种缓存控制?!?需要进一步调查我们的基础架构中的硬件添加此缓存控制。

3 个答案:

答案 0 :(得分:1)

我对基于HTML5 / JQM / Jersey的应用程序遇到了同样的问题。我将缓存控制标头设置为 no-cache ,现在它似乎可以在大多数设备上运行,但在某些设备上仍会间歇性地失败。

答案 1 :(得分:1)

我在应用程序中遇到了同样的问题,并且发现必须使用Cache-control设置请求的标头:no-cache,以避免iOS6缓存响应。

请查看以下链接:

Is Safari on iOS 6 caching $.ajax results?

答案 2 :(得分:0)

如果您使用:

Cache-Control:no-cache, no-store

iOS6不应该有任何缓存AJAX调用的方法。我怀疑iOS6实际上已经开始遵守规则并实现了“Cache-control:private”,因为它本来是最初工作的,而几乎任何其他浏览器都将它视为“无缓存”指令。

我使用PHP的SAJAX框架(设置为'private')时遇到了同样的问题。