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



我有一个跨域的$.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 和 Opera正在工作并从重定向到页面返回数据,但不是 Safari 我可以看到重定向(Safari 控制台),但重定向后的第二个调用中止。

有什么想法吗?

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

不久前,由于在Safari中使用CORS而导致重定向时遇到了一些问题。

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

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

支持的标头:页面成功,页面错误,页面登录,来源,接受语言,接受编码

支持的方法:获取、发布、头、放置、删除、选项

暴露的标题:页面成功, 页面错误, 页面登录

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

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

在这里,您将找到几个有用的链接:

  • http://zacstewart.com/2012/04/14/http-options-method.html
  • https://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
  • http://software.dzhuvinov.com/cors-filter.html
  • http://enable-cors.org/resources.html

问候。

附言。您的配置似乎与我们的配置几乎相同。只有支持的标头存在差异(当然还有专门为我们的情况添加的暴露标头)

相关内容

  • 没有找到相关文章

最新更新