【问题标题】:IOS6 mobile web app caching HTMLIOS6 移动 web 应用缓存 HTML
【发布时间】:2012-09-25 08:22:51
【问题描述】:

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

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

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

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

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

更新:

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

【问题讨论】:

    标签: html ios6


    【解决方案1】:

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

    【讨论】:

    • 从我早期的调查来看,这确实解决了这个问题,但我不确定为什么它在 IOS5 和 IOS6 之间的行为不同。
    • 这只是 iOS6 的问题。我们注意到的另一件事是,如果您使用现有保存的书签访问应用程序,浏览器仍在缓存,即使我们更改了服务器端代码以发送“无缓存”标头。所以我们不得不删除设备上现有的书签并删除所有缓存的数据。这现在似乎解决了这个问题。
    【解决方案2】:

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

    请查看以下链接:

    Is Safari on iOS 6 caching $.ajax results?

    【讨论】:

    • 我们遇到的绝对问题是我们无法控制缓存控制设置,因为我们的基础架构中的某些内容正在覆盖。
    【解决方案3】:

    如果你使用:

    Cache-Control:no-cache, no-store
    

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-29
      • 1970-01-01
      • 2012-01-10
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多