预检的响应在角度发布请求上具有无效的HTTP状态代码403

时间:2016-09-20 09:56:16

标签: angularjs

我在localhost中有一个$ http请求,它正在调用一些api的url。我在执行调用时遇到错误

Response for preflight has invalid HTTP status code 403

我可以使用角度做任何事情,以便我可以解决这个问题吗?我有chrome的CROS插件以允许交叉来源请求

$http({
                method: 'POST',
                url: url,
                data:data1,
                headers: {
                    'Access-Control-Allow-Origin': '*',                 
                }
            })

3 个答案:

答案 0 :(得分:5)

如果您使用java restful controller作为您的服务器。 您可以参考https://spring.io/guides/gs/rest-service-cors/

我在我的控制器上添加了@CrossOrigin(originins =" *")并且它可以工作。 基本上,你不能在客户端做任何事情。

答案 1 :(得分:1)

好的,这就是我怎么想的。这一切都与CORS政策有关。在POST请求之前,Chrome正在执行预检OPTIONS请求,该请求应在实际请求之前由服务器处理和确认。现在这真的不是我想要的这么简单的服务器。因此,重置标题客户端可防止预检:

app.config(function ($httpProvider) {
  $httpProvider.defaults.headers.common = {};
  $httpProvider.defaults.headers.post = {};
  $httpProvider.defaults.headers.put = {};
  $httpProvider.defaults.headers.patch = {};
});

浏览器现在将直接发送POST。希望这可以帮助很多人...我真正的问题是不够理解CORS。

链接到一个很好的解释:http://www.html5rocks.com/en/tutorials/cors/

感谢这个答案给我指路。 AngularJS POST Fails: Response for preflight has invalid HTTP status code 404

答案 2 :(得分:0)

我在angularjs中有这个代码:

$http.post('http://localhost:8080/employee/'
        , $scope.alumno
        ,{headers: {'Content-Type': 'application/json'}}
        ).success(function(data){

            if ( data.err === false ) {
                $scope.actualizado = true;

                setTimeout(function() {
                    $scope.actualizado = false;
                    $scope.$apply();
                }, 3500);

            };
        });

我的API有这些数据:

//Add employee:
Url: http://localhost:8080/employee
Type request: POST
Add a new employee:
{
 "firstName": "Javier",
 "lastName": "Piedra",
}`

我使用带有扩展名的chrone用于GET的可用CORS,但是发布了这个错误:

XMLHttpRequest cannot load http://localhost:8080/employee/. Response for 
preflight has invalid HTTP status code 403

在我的app.config中使用:

app.config( function($routeProvider,$httpProvider){

$httpProvider.defaults.headers.common = {};
$httpProvider.defaults.headers.post = {};
$httpProvider.defaults.headers.put = {};
$httpProvider.defaults.headers.patch = {};

也许这可以解决您的问题。

此致