【问题标题】:Unable to send a CORS POST request with jQuery无法使用 jQuery 发送 CORS POST 请求
【发布时间】:2013-03-08 22:18:56
【问题描述】:

我正在尝试通过 ajax 向单独的子域发送 POST 请求。预检请求 (OPTIONS) 成功,但以下 XMLHttpRequest 请求返回“Origin http://app.example.com is not allowed by Access-Control-Allow-Origin。”

客户端 (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 状态。我希望有人能够告诉我我错过了什么。谢谢!

【问题讨论】:

    标签: php jquery http cors


    【解决方案1】:

    您需要:

    1. 完全删除 Access-Control-Allow-Credentials 标头(这不会在请求中发送任何 cookie),或者:
    2. 将以下内容添加到您的 ajax 请求中:xhrFields: { withCredentials: true },

    第二个选项将在请求中包含 cookie。更多详情请看这里:Sending credentials with cross-domain posts?

    您可能想先尝试第一个选项,以确保跨域请求正常工作,然后再添加 cookie(以便于调试)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 2018-07-20
      • 2016-10-16
      • 2020-12-29
      • 2013-04-08
      • 2022-01-15
      • 2019-05-13
      • 2015-09-25
      相关资源
      最近更新 更多