ios Safari 6中的Ajax post请求不起作用

问题描述:

升级到iOS6.0发布后,ajax登录页面停止工作。 它看起来像jQuery发出的ajax post请求$ .ajax甚至在添加了随机查询字符串参数并将Cache-control设置为“no-cache”(这些在网络上作为缓存问题的解决方案)后,被缓存在safari中。 首次登录尝试正常工作,但在第二次登录请求浏览器注销后,不会从服务器获取任何响应主体。只有标题。ios Safari 6中的Ajax post请求不起作用

在iOS 6 GM和5版本以及所有桌面浏览器中也一样。

任何想法?

+2

http://*.com/questions/12506897/is-safari-on-ios-6-caching-ajax-results的重复 – Brombomb

我刚刚阅读这篇文章在ars technica似乎与您的问题有关。 这似乎是一个苹果在iOS6中对Safari的“优化”。

+0

我太了解这个问题很多职位,并尝试两种解决方案我发现:no-cache头和随机参数。 它不适合我, 现在我尝试将所有POST AJAX请求移动到GET请求。但我不确定这是否是安全的解决方案。甚至在SSL会话中用GET发送密码是否安全? – Boris

+0

随机参数应该足够单独我认为,因为它会产生一个新的url每个请求。 – dweeves

+0

对我不起作用。 – Boris

这个话题也涉及到很多的细节在这里: Is Safari on iOS 6 caching $.ajax results?

,还应注意,但是,不盖在上面。

有一个对WCF有用的评论,它也适用于ASP.NET MVC应用程序和SetCacheability。我建议这些调用仅限于非GET请求,以避免在GET上丢失缓存的好处。

我使用了一个控制器基类,我的所有控制器继承自许多原因,而且这很好,因为我的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); 
     ... 
    } 
... 
}