【问题标题】:Response for preflight has invalid HTTP status code 403 on angular post request预检响应在角度发布请求上具有无效的 HTTP 状态代码 403
【发布时间】:2017-01-28 04:45:07
【问题描述】:

我的本​​地主机中有一个 $http 请求,它正在调用某个 api 的 url。我在执行调用时遇到错误

Response for preflight has invalid HTTP status code 403

我可以使用 Angular 做任何事情来解决这个问题吗?我有 chrome 的 CROS 插件允许跨域请求

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

【问题讨论】:

  • 服务器端脚本是什么?
  • 403 被禁止访问...
  • 服务器端脚本/代码需要在其代码中添加允许来源。
  • 服务器端是 java 但我对此无能为力

标签: angularjs


【解决方案1】:

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

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

林

【讨论】:

  • 这对我有用。长期在 Java 代码中的控制器方法上保留此注释有什么风险吗?
【解决方案2】:

好的,这就是我的想法。这一切都与 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

【讨论】:

  • 有这样的解决方案可以在 jQuery 中使用吗?
  • 如何在 Angular2 中做到这一点?
【解决方案3】:

我在 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 来获得可用的 CORS 的 GET 非常完美,但发布示例此错误:

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 = {};

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

问候

【讨论】:

  • 如果您有新问题,请点击 按钮提出问题。如果有助于提供上下文,请包含指向此问题的链接。 - From Review
  • 谢谢。我不能问:您已达到问题限制。问候
猜你喜欢
  • 2016-04-14
  • 2016-02-08
  • 2017-07-02
  • 2018-04-05
  • 2018-03-08
  • 2018-09-22
  • 2018-04-19
  • 2018-03-04
  • 2018-09-30
相关资源
最近更新 更多