Angular $http:预检响应具有无效的 HTTP 状态代码 403

Posted

技术标签:

【中文标题】Angular $http:预检响应具有无效的 HTTP 状态代码 403【英文标题】:Angular $http: Response for preflight has invalid HTTP status code 403 【发布时间】:2016-02-08 03:45:09 【问题描述】:

我正在编写一个 Angular 应用程序,我正在尝试使用 $http 服务连接到我们的 API。

$http.post('https://backend-test/***/v001/login', 'userName': 'admin', 'password': 'passtest', headers: 'Accept': 'application/json', 'Content-Type': 'application/json').then(function success(response) 
    console.log(response);
);

但是,我不断收到此错误:

XMLHttpRequest 无法加载 https://backend-test/***/v001/登录。回复 对于预检有无效的 HTTP 状态代码 403

它似乎发送了一个 OPTIONS 请求而不是一个 POST 请求:

请求方法:OPTIONS

奇怪的是,当我使用这个工具时它可以正常工作:

https://www.hurl.it/

有什么想法吗?

【问题讨论】:

我认为你必须把关键参数像$http.post('https://backend-test/***/v001/login', params : 'userName': 'admin', 'password': 'passtest', headers: 'Accept': 'application/json', 'Content-Type': 'application/json').then(function success(response) console.log(response); ); @pbolduc params 的使用不适用于发布请求 服务器似乎没有启用 CORS 和/或似乎没有设置为处理浏览器在发出跨域请求时将发送的 OPTIONS 预检请求 它将在 hurl.it 或 Runscope 上工作,因为它们是基于服务器的客户端发出请求。他们不需要像您的客户端 JS 那样使用 CORS。 【参考方案1】:

这里是 exressJS (NodeJS) 的 Cors 中间件

npm install cors

代码:

var cors = require('cors'),express = require('express');
var app = express(); // defining app using express

app.use(cors()); // **core as middleware**

【讨论】:

【参考方案2】:

我遇到了同样的问题。我的后端是一个 tomcat 服务器。我通过像这样配置 web.xml 来解决它:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization</param-value>
    </init-param>     
</filter>

【讨论】:

以上是关于Angular $http:预检响应具有无效的 HTTP 状态代码 403的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 - 预检响应具有无效的 HTTP 状态代码 401

预检响应具有无效的 HTTP 状态代码 403 + angular 2 + Java Spring boot

通过基本身份验证访问 REST 的 Angular2 抛出“预检响应具有无效的 HTTP 状态代码 401”

预检响应具有无效的 HTTP 状态代码:401 角度

预检响应在 Angular Js1 和 Webapi 2 上具有无效的 HTTP 状态代码 405

AngularJS HTTP 标头配置。预检响应具有无效的 HTTP 状态代码 401