我正在尝试通过 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 状态。我希望有人能够告诉我我错过了什么。谢谢!
最佳答案
您需要:
- 完全删除
Access-Control-Allow-Credentials
header (这不会根据请求发送任何 cookie),或者: - 将以下内容添加到您的 ajax 请求中:
xhrFields: { withCredentials: true },
第二个选项将在请求中包含 cookie。有关更多详细信息,请参见此处:Sending credentials with cross-domain posts?
您可能想先尝试第一个选项,只是为了确保跨域请求正常工作,然后再添加 cookie(以便于调试)。
关于php - 无法使用 jQuery 发送 CORS POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15513084/