在safari上跨域$ .ajax和302重定向

时间:2015-03-11 16:41:38

标签: jquery ajax redirect safari cross-domain

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

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

和vhost conf上的服务器端

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&歌剧正在发挥作用将数据从重定向返回到页面,但不是safari我可以看到重定向(safari控制台),但重定向后的第二次调用被中止。

任何想法?

1 个答案:

答案 0 :(得分:1)

这应该是评论,但我无法发表评论。我希望这会对你有所帮助。

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

Safari会中止请求,因为它之前会执行转发前请求,但配置可能不合适。

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

supportedHeaders: 的 pageSuccess,pageError,pageLogin,起源,接受语言,接受编码

supportedMethods: GET,POST,HEAD,PUT,DELETE,OPTIONS

exposedHeaders: pageSuccess,pageError,pageLogin

还允许子域名,支持的凭据并允许通用http请求设置为 true

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

在这里您可以找到几个有用的链接:

问候。

聚苯乙烯。您的配置似乎与我们的几乎相同。 supportedHeaders只有差异(当然还有专门为我们的情况添加的exposedHeaders)