1

我们在主屏幕上保存了一个移动网络应用程序。该应用程序使用带有 jquery mobile 的单页 HTML 文件进行编码。

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

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

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

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

更新:

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

4

3 回答 3

1

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

于 2012-10-03T15:05:00.440 回答
1

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

请查看以下链接:

iOS 6 上的 Safari 是否缓存 $.ajax 结果?

于 2012-10-05T17:08:20.723 回答
0

如果您使用:

Cache-Control:no-cache, no-store

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

在使用 PHP 的 SAJAX 框架(设置为“私有”)时,我遇到了同样的问题。

于 2012-10-09T21:14:32.250 回答