jquery - Safari 上的跨域 $.ajax 和 302 重定向

标签 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
    }
});

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

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 中止请求,因为它之前执行了飞行前请求,并且配置可能不充分。

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

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

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

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

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

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

在这里您会找到一些有用的链接:

问候。

诗。你的配置看起来和我们的几乎一样。仅在supportedHeaders上有区别(当然还有专门为我们的案例添加的exposeedHeaders)

关于jquery - Safari 上的跨域 $.ajax 和 302 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992417/

相关文章:

javascript - 通过AJAX页面插入让人耳目一新

javascript - 同位素布局中的动态 iframe 高度

javascript - AJAX 调用成功

php - header ('HTTP/1.1 404 Not Found' );什么也没做

javascript - 移动设备/平板电脑上的响应式网站、页眉和页脚宽度问题

javascript - 如何通过点击 JavaScript 中输入文本字段内的十字按钮来刷新我的实时搜索?

jquery - 使用 jQuery 进行异步 ajax 调用期间文本框失去焦点

apache - .htaccess 中的通配符

regex - 使用 Redirect 与 RewriteRule 的速度影响

javascript - 如何为表中的多个数据创建 AJAX POST 按钮?