无法发送CORS POST请求与jQuery(Unable to send a CORS POST

2019-10-17 20:28发布

我试图通过AJAX发送POST请求到一个单独的子域。 预检请求(OPTIONS)是成功的,但下面的XMLHttpRequest请求返回“原点http://app.example.com不受访问控制允许来源允许”。

该客户端(app.example.com)代码如下所示:

var settings = {
    url: 'http://api.example.com/auth',
    type: 'POST',
    contentType: 'application/json',
    crossDomain: true,
    headers: {"X-Requested-With": "XMLHttpRequest"},
    username: data.username,
    success: callback,
    error: callback
};

$.ajax(settings);

服务器端代码(api.example.com)看起来是这样的:

$this->output->set_header('Content-Type: application/json; charset=utf-8');
$this->output->set_header('Access-Control-Allow-Origin: http://app.example.com');
$this->output->set_header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD, OPTIONS');
$this->output->set_header('Access-Control-Allow-Headers: X-Requested-With, Origin, X-Csrftoken, Content-Type, Accept');
$this->output->set_header('Access-Control-Allow-Credentials: true');

OPTIONS请求返回200个状态。 我希望有人能告诉我,我错过了什么。 谢谢!

Answer 1:

您需要:

  1. 卸下Access-Control-Allow-Credentials完全头部(这将不会发送该请求的任何cookie),或:
  2. 以下内容添加到您的Ajax请求: xhrFields: { withCredentials: true },

第二个选项将包括在请求中的Cookie。 在这里看到更多的细节: 发送凭据跨域帖子?

你可能想先试试第一个选项,只是为了确保跨域请求工作,然后添加饼干后(以使事情更容易调试)。



文章来源: Unable to send a CORS POST request with jQuery