CORS 策略已阻止从源“localhost”访问“production_api_url”处的 XMLHttpRequest
Posted
技术标签:
【中文标题】CORS 策略已阻止从源“localhost”访问“production_api_url”处的 XMLHttpRequest【英文标题】:Access to XMLHttpRequest at 'production_api_url' from origin 'localhost' has been blocked by CORS policy 【发布时间】:2019-10-30 17:52:11 【问题描述】:我正在开发一个使用 Angular 2 作为前端和 Laravel 5.7 来构建网站的项目。在网站中,我正在尝试实现一个用户配置文件部分,例如登录、注册、密码重置、忘记密码、配置文件视图、编辑配置文件。我编写了用户配置文件部分所需的所有 api,并在 POSTMAN 中对其进行了测试,一切都变得很好。但是,当我尝试实现需要 api 令牌的 api 时,我得到了这个错误
从源 'http://localhost:4200' 访问 XMLHttpRequest 在 'http://localhost:4200' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。"
我找不到解决方案。请帮助我找到解决此问题的方法。
提前致谢
我已经为 CORS 创建了中间件,并为需要的路由添加了该中间件。
我在中间件中尝试了两种不同的代码。我在这里粘贴这些代码。
1.
return $next($request)
->header(‘Access-Control-Allow-Origin’, ‘*’)
->header(‘Access-Control-Allow-Methods’, ‘GET, POST, PUT, DELETE, OPTIONS’)
->header(‘Access-Control-Allow-Headers’, ‘X-Requested-With, Content-Type, X-Token-Auth, Authorization’);
2.
header("Access-Control-Allow-Origin: *");
// ALLOW OPTIONS METHOD
$headers = [
'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Headers'=> 'Content-Type, X-Auth-Token, Origin, Authorization'
];
if($request->getMethod() == "OPTIONS")
// The client-side application can set only headers allowed in Access-Control-Allow-Headers
return Response::make('OK', 200, $headers);
$response = $next($request);
foreach($headers as $key => $value)
$response->header($key, $value);
return $response;
【问题讨论】:
使用这个github.com/barryvdh/laravel-cors 来处理后端的cors 它处于什么状态? 它显示“Access-Control-Allow-Origin 只允许一个值,多个给定” "'Access-Control-Allow-Origin' 标头包含多个值 '*, localhost:4200',但只允许一个。" - 这是现在的错误 【参考方案1】:尝试在您的 laravel 应用程序 routes/api.php 顶部添加这些标题
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
【讨论】:
以上是关于CORS 策略已阻止从源“localhost”访问“production_api_url”处的 XMLHttpRequest的主要内容,如果未能解决你的问题,请参考以下文章
CORS 策略已阻止从源访问“http://localhost...”处的 XMLHttpRequest:
CORS 策略已阻止从源“http://localhost:4200”访问“http://localhost:8080/BeginSignup”获取
CORS 策略已阻止从源“http://localhost:3001”访问“blahblahblah”获取
CORS 策略已阻止从源“http://localhost:3000”访问“http://localhost:8080/demo/getAll”获取
CORS 策略已阻止从源“http://localhost:3000”访问“http://localhost:8000/api/puppies”获取
CORS 策略已阻止从源“localhost”访问“production_api_url”处的 XMLHttpRequest