【发布时间】: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