【问题标题】:iOS6 - Is there a way to clear cached ajax POST requests for webapp added to home screen?iOS6 - 有没有办法清除添加到主屏幕的 webapp 的缓存 ajax POST 请求?
【发布时间】:2012-09-20 11:58:30
【问题描述】:

iOS6 ajax POST 请求缓存正在成为我们 webApp 的一个大问题。我们的大多数用户都已将应用程序添加到主屏幕。自从升级以来,大多数对后端的 POST 请求都无法正常工作,并且 6 天前的数据已经过时并且还在增加。我们知道解决此问题的两种解决方法,一种是通过添加时间戳或一些随机输入来更改每个 POST 请求,使其不同,第二种是禁用网络服务器上的缓存。

以下帖子详细介绍了这两种解决方法: Is Safari on iOS 6 caching $.ajax results?

如果在 iOS6 升级之前(或之后)设置,关闭网络服务器上的缓存可以解决问题。但是,似乎从升级到我们从添加到主屏幕的应用程序中关闭缓存之前发出的任何 POST 请求仍然被缓存!我们找不到清除它们的方法。删除主屏幕应用程序并重新启动设备并不能解决问题!除了关闭网络服务器上的缓存之外,我们唯一的选择是更改 URL 或为每个请求添加时间戳。

除了恢复出厂设置之外,有没有人知道清除主屏幕应用缓存的方法?请提供详细信息。

警告任何通过在请求中添加时间戳而不关闭服务器上的缓存来实现解决方法的人。如果您的应用程序被添加到主屏幕,现在每个帖子响应都将被缓存并且它似乎不会过期。除非有人有办法清除它,否则这看起来像是潜在的内存泄漏!

【问题讨论】:

  • iOS6 的缓存显然违背了 HTTP 规范(参见 mnot.net/blog/2012/09/24/caching_POST)。不要指望它会在 6.01 出现
  • 这确实与规范相反,但我完全希望它在 6.01 中仍然存在,因为 Apple 尚未承认该错误并且可能只是假设人们会自己修复它并且他们可以保留在他们的不错的“性能改进”。 Grr.

标签: javascript jquery ajax ios6


【解决方案1】:

根据我的经验,解决此缓存问题的唯一方法是采用 Google 的方法并在 url 中添加每个请求的 id。然后,您可以为您的服务器使用 mod_rewrite 或其他此类引擎,以使您的后端脚本透明。

【讨论】:

  • 同意。添加每个请求的 ID(将其保存到会话中),该 ID 在收到发布数据后过期。或者,您可以将其添加为隐藏的表单元素而不是 url 参数,但无论哪种方式都可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多