我知道这是一个非常常见的问题,还有很多其他问题,但是,我不知道该怎么办了。我已经将Laravel API应用程序从5.8
升级到7.10.3
,现在我遇到的CORS
问题以前从未发生过。 Laravel 7已经提供了fruitcake/laravel-cors
软件包,这是我在config/cors.php
中的配置(默认配置):
'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,
基本上每个origin
,headers
和methods
都被允许。我什至尝试将这些行添加到bootstrap/app.php
中,但行不通:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');
我的前端是使用VueCli 3
构建的,我没有对其进行任何更改,只是升级了Laravel版本。
对POSTMAN
的请求运行正常。有谁知道为什么会发生此问题?
完整错误消息:
Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/operacao/cadastrar' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
答案 0 :(得分:1)
我发现了问题:我的请求在$request->validate()
方法中失败了,并且在带有自定义异常处理程序的try / catch
块中,如下所示:
try {
$request->validate(array(...)); //validation was failing
//code...
} catch (\Exception $e) {
//This was the problem
http_response_code(400);
die($e->getMessage());
}
只需将$request->validate()
放在try
之前就可以了。只记得validate()
有自己的异常处理程序。
我不知道为什么会导致CORS错误,但是我认为这是因为它是在headers
等之前发送Access-Control-Allow-Origin
的。
答案 1 :(得分:0)
使用REACT时,我遇到了类似的问题,我的解决方案是添加标头并按如下格式格式化我的请求。
axios.request({
method: "POST",
url: '<url>',
data: data,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
})
.then(function (response) {
<what to do if works>
})
.catch((response) => {
<what to do if it doesn't work>
})