Php Laravel上的CORS(访问控制允许原点)
我在AngularJS中创建了一个应用程序,并尝试调用Laravel API:Php Laravel上的CORS(访问控制允许原点),php,laravel,laravel-5,cors,Php,Laravel,Laravel 5,Cors,我在AngularJS中创建了一个应用程序,并尝试调用Laravel API: MyApp(AngularJS): API(拉威尔样板): 我使用Laravel来编写API 但我在浏览器控制台中遇到了以下错误: 无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“” 我试图在api_routes.php中应用cors中间件(barryvdh/laravel cors),但错误仍然存在 api_routes
- MyApp(AngularJS):
- API(拉威尔样板):
<?php
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', ['middleware' => 'cors'], function ($api) {
$api->post('auth/login', 'App\Api\V1\Controllers\AuthController@login');
$api->post('auth/signup', 'App\Api\V1\Controllers\AuthController@signup');
$api->post('auth/recovery', 'App\Api\V1\Controllers\AuthController@recovery');
$api->post('auth/reset', 'App\Api\V1\Controllers\AuthController@reset');
// example of protected route
$api->get('protected', ['middleware' => ['api.auth'], function () {
return \App\User::all();
}]);
// example of free route
$api->get('free', function() {
return \App\User::all();
});
});
我对这个实现完全错了。origin
头在Laravel中有一个特定的放置案例,在这个案例中,其他头可以在中间件中定义,origin
头不能
相反,您需要将其添加到主routes.php
文件的顶部:
header('Access-Control-Allow-Origin: http://localhost:8080');
我不完全理解这一点,但当我需要跨浏览器访问时,我会将一个.htaccess文件添加到我的端点所在的文件夹中,其中包含以下内容:
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
您应该添加一个nginx虚拟主机,通过代理传递指向您的api。基本上,您需要确保前端和后端都来自同一个域您可以创建Cors中间件类并将其添加到kenel.php中的应用程序全局HTTP中间件堆栈中。此堆栈中的中间件将在应用程序的每个请求期间运行
尝试。将此添加到routes.php
文件或api.php
文件的顶部,具体取决于您放置路由的位置:
header('Access-Control-Allow-Origin: http://localhost:8080');
header('Access-Control-Allow-Headers: origin, x-requested-with, content-type');
header('Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS');
在向其发出请求的站点中添加这3行代码可以解决CORS问题。以上内容将允许运行在上的JS向包含上述行的后端发出请求
答案来源于@Dallas Caley的答案。大多数CORS问题都与服务器相关,如果.htaccess无法解决这个问题,您可以从application starter文件中给出相同的标题。所以要了解域名,其中是指向文件夹路径的应用程序。在Laravel index.php中,它是一个启动文件,因此请使用以下代码行和外接程序的起始行
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: *");
在浏览器中缓存清除加载web应用所需的内容Hi@ohgod为什么我尝试了此操作,请在回答问题后重试,错误仍然存在。我不知道AngularJS应用程序中有什么,我不需要更改任何内容,好吗?@MateusVitali查看我的更新,我刚刚做了一些测试,我发现必须在routes.php
文件(或更早版本)中设置Origin
头才能正确应用。可以在中间件中的响应上设置其他标头。我还不能100%确定原因,但这就是我发现的。试一试。更好的打印屏幕质量:@MateusVitali我可以看到标题在响应中提供给您,所以它工作正常!你能检查一下PHP错误并将其禁用吗?它阻止了服务器修改头文件,因为这是一个错误。但是我希望我可以把它放在不同的域中。