AngularJS在发送POST数据时抛出403错误

时间:2015-11-10 12:05:04

标签: javascript jquery angularjs

我的Angular应用程序向对其他域开放的API发出请求。

POST请求没有 data字段时,请求成功完成。因此,$http.post(url).then();有效。但是,$http.post(url, data).then() or $http.post(url, null).then();没有。请求也可以使用jQuery和Postman(我正在使用的REST客户端)完成。

抛出的错误是:对预检请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost”访问。响应的HTTP状态代码为403。

设置自定义标题(与SO上的大多数答案一样)不成功。使用{headers: {}}或修改$httpProvider.defaults传递配置对象时,Chrome检查器中的标题没有变化。

启用CORS plugin后问题仍然存在,这意味着这与API无关。

我错过了什么?

3 个答案:

答案 0 :(得分:0)

使用restws / Drupal我的角度应用程序遇到了类似的问题。

打开网络控制台并检查标题..应该发现您的请求已被"预检"选项请求 现在在现代浏览器中,在跨域请求中,将首先在PUT之前触发OPTIONS请求。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Overview

我的猜测是API未配置为接受选项请求。

我不得不用一点点黑客修补restws以识别OPTIONS对象并返回接受PUT

答案 1 :(得分:0)

刚刚意识到..

1)您是否将CORS设置为通配符(或#34;镜像"使用CORS模块 - )? 我认为OPTIONS请求需要特定的域引用。 我不得不将我的CORS标题更改为Allow-access-control-origin> mydomain.com&不*

2)另外,你是否无头? 我发现使用restw - 我必须实际登录我的drupalk网站&然后对会话/令牌执行api请求以获取令牌,传递我的身份验证凭据。 如果最初没有登录,我会拒绝403访问。

答案 2 :(得分:0)

也许可能是cors配置的错误。

如果您的问题是使用tomcat服务器,则必须使用以下代码在web.xml文件中配置cors过滤器:

<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> 
    <init-param> 
        <param-name>cors.allowed.origins</param-name> 
        <param-value>*</param-value> 
    </init-param> 
    <init-param> 
        <param-name>cors.allowed.methods</param-name> 
        <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value> 
    </init-param> 
</filter>

<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我希望能帮到你!!