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

Posted

技术标签:

【中文标题】ios Safari 6 中的 Ajax 发布请求不起作用【英文标题】:Ajax post request in ios Safari 6 not work 【发布时间】:2012-09-24 12:45:27 【问题描述】:

升级到ios6.0版本后,ajax登录页面停止工作。 看起来 jquery $.ajax 发出的 ajax 发布请求即使在添加随机查询字符串参数并将 Cache-control 设置为“no-cache”(这些在网上找到作为缓存问题的解决方案)之后也被缓​​存在 safari 中。 第一次登录尝试工作正常,但在第二次登录请求浏览器注销后,不会从服务器获得任何响应正文。只有标题。

同样适用于 IOS 6 GM 和 5 版本以及所有桌面浏览器。

有什么想法吗?

【问题讨论】:

重复***.com/questions/12506897/… 【参考方案1】:

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

【讨论】:

我也阅读了很多关于这个问题的帖子,并尝试了我发现的两种解决方案:无缓存标头和随机参数。它对我不起作用,现在我尝试将所有 POST AJAX 请求移动到 GET 请求。但我不确定这是安全的解决方案。即使在 SSL 会话中,在 GET 中发送密码是否安全? 我认为随机参数应该足够了,因为它会为每个请求生成一个新的 url。 只有在 IIS Cache-Control 中添加 pragma:no-cache 标头后才使用 asp.net:no-cache was not enought 我不建议使用 GET 发送敏感数据。使用 post 或 put。我遇到了 Safari 缓存我的帖子请求的问题。现在服务器添加了 no-cache 标头,它现在可以正常工作了。您能否为似乎已缓存的帖子发布请求和响应标头的屏幕截图? 抱歉,错过了您上面的评论 :) 很高兴看到您也已修复。 Safari 6 已经给我带来了一些问题。【参考方案2】:

这里也详细介绍了这个主题: Is Safari on iOS 6 caching $.ajax results?

但是,还有一个额外的注意事项,上面没有提到。

关于 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);
        ...
    
...

【讨论】:

以上是关于ios Safari 6 中的 Ajax 发布请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有跨域重定向的 Safari xhr (AJAX) 请求失败

jQuery Mobile 1.1.0 RC1 在 iOS Safari 中修改 AJAX 帖子的 HREF

跨域 ajax 不适用于移动 Safari 中的重定向

Safari ajax 请求加载资源失败:网络连接丢失

带有凭据的 Axios 请求导致 MacOS Safari 或任何 iOS 浏览器中的网络错误

如何检查在 iPhone Safari 上运行的 Ajax 请求的状态?