我正在尝试使用AngularJS(在我的情况下是API_VERSION和Distributor)使用自定义标头发出HTTP POST请求。所以我的代码看起来像这样:
$http({
method: "POST",
url: url,
data: {
"Email": email,
"Password": password,
"DistributorId": 2
},
headers: {
"API_VERSION": 4,
"Distributor": 2
}
}).then(function(response) {
console.log("success");
}, function(response) {
console.log("error");
});
我尝试在Chrome中运行此代码并遇到下一个错误:
OPTIONS <url>
XMLHttpRequest cannot load <url>. Invalid HTTP status code 400
据我所知,浏览器使用Origin,Access-Control-Request-Headers和Access-Control-Request-Method标头生成预检请求。然后,服务器应使用以下标头进行响应:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: API_VERSION, Distributor
但在我的情况下,API_VERSION和Distributor标头不在Access-Control-Allow-Headers列表中。这意味着我无法使用此标头发出HTTP POST请求,正如我所理解的那样。
在Chrome和Firefox中均可观察到此行为,但在Safari中可以正常使用。我已经使用Advanced REST Client测试了这个Web服务,所有工作都很好。
这种行为的原因是什么?如何让它发挥作用?
提前致谢!
更新:这很奇怪,但是当我删除所有自定义标头时,我仍然得到相同的400错误。 Safari告诉我:
Failed to load resource: Request header field Content-Type is not allowed by Access-Control-Allow-Headers.
事实上,Chrome显示的内容类型标题不在Access-Control-Allow-Headers列表中。