升级到iOS6.0 版本后,ajax 登录页面停止工作。看起来 jquery $.ajax 发出的 ajax 发布请求即使在添加随机查询字符串参数并将 Cache-control 设置为“no-cache”(这些在网上找到作为缓存问题的解决方案)之后也被缓存在 safari 中。第一次登录尝试工作正常,但在第二次登录请求浏览器注销后,不会从服务器获得任何响应正文。只有标题。
这同样适用于 IOS 6 GM 和 5 版本以及所有桌面浏览器。
有任何想法吗?
升级到iOS6.0 版本后,ajax 登录页面停止工作。看起来 jquery $.ajax 发出的 ajax 发布请求即使在添加随机查询字符串参数并将 Cache-control 设置为“no-cache”(这些在网上找到作为缓存问题的解决方案)之后也被缓存在 safari 中。第一次登录尝试工作正常,但在第二次登录请求浏览器注销后,不会从服务器获得任何响应正文。只有标题。
这同样适用于 IOS 6 GM 和 5 版本以及所有桌面浏览器。
有任何想法吗?
我刚刚在ars technica阅读了这篇似乎与您的问题有关的文章。这似乎是苹果在 iOS6 中对 Safari 的“过度优化”。
此处还详细介绍了该主题: iOS 6 上的 Safari 是否缓存 $.ajax 结果?
但是,还有一个注意事项,上述内容未涵盖。
关于 WCF 有一个有用的评论,它也适用于 ASP.NET MVC 应用程序的 SetCacheability。我建议这些调用仅限于非 GET 请求,以避免失去 GET 缓存的好处。
由于多种原因,我使用了一个 Controller 基类,我的所有控制器都从该基类继承,这很好,因为我的 Initialize 覆盖可以处理设置我的缓存标头。
public class SmartController : Controller
{
...
public HttpContextBase Context { get; set; }
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
Context = requestContext.HttpContext;
if (Context.Request.RequestType != "GET")
{
Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
}
base.Initialize(requestContext);
...
}
...
}