如何在通过 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 重定向问题?的主要内容,如果未能解决你的问题,请参考以下文章