如何在通过 ajax 执行后期操作时克服 CORS 重定向问题?

Posted

技术标签:

【中文标题】如何在通过 ajax 执行后期操作时克服 CORS 重定向问题?【英文标题】:How to overcome CORS redirect issue while performing post operation via ajax? 【发布时间】:2016-09-30 09:29:12 【问题描述】:

我可以通过使用来自外部登录表单的 post 方法类型的表单提交登录到 roundcube 实例(托管在另一台服务器上)。

我收到此错误(通过 ajax 签名时):

XMLHttpRequest 无法加载 https://192.168.0.7/mail/。请求被重定向到“https://192.168.0.7/mail/?_task=mail&_token=36e97d50951472c4c65de562a0109e94”,这对于需要预检的跨域请求是不允许的。

$.ajax(
    type: 'POST',
    url: 'https://192.168.0.7/mail/',
    data: 
        _user: 'myusername', _pass:'mypassword', _autologin: 1, _action: 'login',_task: 'login'
    ,
    success: function( data )
        $('#result').html(data);
    ,
    crossDomain: true,
);

我已经克服了所有与 CORS 相关的问题,除了这个问题。我知道这是默认浏览器行为,不允许跨站点重定向。请建议,如果有办法解决这个问题还是我应该继续寻找另一种方法?

谢谢

【问题讨论】:

此链接可能对您有所帮助。 ***.com/questions/18539403/… 【参考方案1】:

你应该试试这个:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); 

您应该在标题中添加您需要访问的所有方法。

【讨论】:

我也试过这个选项,我用谷歌搜索,我发现我们需要单独发出第一个 OPTIONS 请求而不是 POST 来克服重定向问题(302)。你对此有什么想法吗? @Daemon 您也应该在重定向的 url 中添加标题。在你的情况下 POST 是做什么的?【参考方案2】:

您可以在服务器中启用跨域请求

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST'); 

【讨论】:

我已经这样做了……现在,我离问题的根源越来越近了。它说在 POST 或 GET 之前发出 OPTIONS 请求...关于触发 OPTIONS 请求的任何想法。 Mozilla 控制台显示:CORS 预检通道未成功

以上是关于如何在通过 ajax 执行后期操作时克服 CORS 重定向问题?的主要内容,如果未能解决你的问题,请参考以下文章

CORS 和 JSONP

Jquery Ajax Post 中的 CORS 问题

带有 CORS 的 Ajax 请求未通过

ajax跨域(跨源)方案之CORS

Nginx通过CORS实现跨域(转)

如何在 AppHarbor 上接受 CORS AJAX 请求?