预检响应在角度发布请求上具有无效的 HTTP 状态代码 403
Posted
技术标签:
【中文标题】预检响应在角度发布请求上具有无效的 HTTP 状态代码 403【英文标题】:Response for preflight has invalid HTTP status code 403 on angular post request 【发布时间】: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 但我对此无能为力 可能的解决方案***.com/questions/47082492/… 【参考方案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 谢谢。我不能问:您已达到问题限制。问候以上是关于预检响应在角度发布请求上具有无效的 HTTP 状态代码 403的主要内容,如果未能解决你的问题,请参考以下文章
预检的 Wcf webHttpBinding 响应具有无效的 HTTP 状态代码 400
CORS 问题:预检响应具有无效的 HTTP 状态代码 403