带有自定义标头的HTTP请求返回400错误(无效的HTTP状态代码)

时间:2015-08-29 20:13:18

标签: javascript angularjs http

我正在尝试使用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列表中。

0 个答案:

没有答案