【问题标题】:crossdomain $.ajax and 302 redirection on safariSafari 上的跨域 $.ajax 和 302 重定向
【发布时间】:2015-05-13 14:02:15
【问题描述】:

我有一个跨域 $.ajax 调用设置,例如

$.ajax({
    url         : 'http://example.com/somepage',
    type        : 'get',
    crossDomain : true,
    xhrFields   : { withCredentials: true },
    success     : function(data) {
        // do something with data
    }
});

和服务器端的虚拟主机配置

SetEnvIfNoCase ORIGIN (.*) ORIGIN=$1
Header set Access-Control-Allow-Origin "%{ORIGIN}e"
Header set Access-Control-Allow-Methods "post, get, put, options, patch, delete"
Header set Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header set Access-Control-Max-Age "60"
Header set Access-Control-Allow-Credentials true

这工作正常,除非我的http://example.com/somepage 使用 302 代码重定向到另一个页面 http://example.com/someotherpage,在这种情况下,即 ff、chrome 和 opera 正在工作并从重定向到页面返回数据,但不是safari 我可以看到重定向(safari 控制台),但重定向后的第二个调用被中止。

有什么想法吗?

【问题讨论】:

  • 我现在一直在整理这样的问题。问题是 Safari 拒绝遵循 ajax 派生的重定向到外部站点。如果您直接点击端点(应该提供重定向的端点),它可能会正常工作。还没有真正的答案给你。我可能会更改我对 200 的响应,其中包含一些内容,告诉前端通过 window.location 调用重定向到嵌入其中的 url。
  • 愚蠢的 Safari... 经典的苹果心态。 “跨域?为什么有人会想去 apple.com 以外的任何地方???”
  • 是的,我现在遇到了这个问题!这太痛苦了。我的问题在这里:stackoverflow.com/questions/33044293/…
  • 我们昨天遇到了这个问题,花了一整天的时间研究它。没有直接修复,但我们很幸运能够绕过重定向。这些天,我们的 safari 代码中似乎有很多特殊情况,比现在看起来的 IE 公平得多
  • 在我的测试中,问题似乎是对执行重定向的 URL 的请求返回时没有响应(在 Safari 上以红色突出显示),并且通过扩展,没有响应标头。这意味着永远不会收到“Access-Control-Allow-Credentials:true”标头。从那里开始,一切都出错了。由于没有这样的标头,浏览器不会将响应传递给 JavaScript(xhr.responseText 是一个空字符串)并触发错误。为什么这一切?在库比蒂诺的某个地方,有人在笑。

标签: jquery ajax redirect safari cross-domain


【解决方案1】:

这应该是评论,但我不能评论。希望对您有所帮助。

不久前,由于 Safari 中使用了 CORS,我们遇到了一些重定向问题。

Safari 中止请求,因为它之前执行了飞行前请求,并且配置可能/不够。

我会尝试以下方法(它对我们有用):

支持的标题: pageSuccess,pageError,pageLogin,Origin,Accept-Language,Accept-Encoding

支持的方法: GET、POST、HEAD、PUT、DELETE、选项

暴露的标题: pageSuccess, pageError, pageLogin

还允许子域、支持的凭据和允许通用 http 请求应设置为 true

我们在标头中公开了一些其他信息,给出了真/假的值(请参阅exposedHeaders 和supportedHeaders),例如ErrorPage 或SuccesPage,当这些信息出现在响应中时,我们使用jqXHR.getResponseHeader('erroPage') 获取它们 以执行重定向。

这里有几个有用的链接:

问候。

附言。您的配置似乎与我们的几乎相同。在 supportedHeaders 上只有区别(当然还有为我们的案例专门添加的暴露的Headers)

【讨论】:

    猜你喜欢
    • 2014-04-25
    • 2016-01-07
    • 2012-07-27
    • 2011-02-10
    • 2017-04-04
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多