没有“访问控制-允许-起源”标头 - Laravel

2022-08-30 16:56:22

XMLHttpRequest 无法加载 http://myapi/api/rating。对预检请求的响应未通过访问控制检查:请求的资源上不存在“访问控制-允许-源”标头。因此,不允许访问源“http://localhost:8104”。响应具有 HTTP 状态代码 403。

我无法弄清楚为什么我无法发出 CORS 请求。我在这里安装了中间件,将其添加到全局http内核中,但它仍然不起作用。尝试在给定堆栈溢出建议的情况下创建自定义中间件,但这也不起作用。还尝试添加路由组。最后,我尝试在请求操作中手动设置响应标头。我真的卡住了 - 帮助是值得赞赏的!

请参阅代码:https://gist.github.com/KerryRitter/0d7ababb7b9eb8d54f0ae55add9704a1


答案 1

如果您正在使用 &并面临与 .只需使用以下软件包并配置您的系统。Laravel 5.5Laravel 5.xNo 'Access-Control-Allow-Origin' header is present on the requested resource

第 1 步:

composer require barryvdh/laravel-cors

第 2 步

您还需要添加到提供程序数组中:Cors\ServiceProviderconfig/app.php

FruitCake\Cors\CorsServiceProvider::class,

要允许所有路由,请在类的属性中添加中间件:CORSHandleCors$middlewareapp/Http/Kernel.php

全球使用:

protected $middleware = [
    // ...
    \Fruitcake\Cors\HandleCors::class,
];

对于中间件用途:

protected $middlewareGroups = [
   'web' => [
       // ...
   ],

   'api' => [
        // ...
        \Fruitcake\Cors\HandleCors::class,
    ],
];

第 3 步

安装完成后,运行以下命令以发布供应商文件。

php artisan vendor:publish --provider="Fruitcake\Cors\ServiceProvider"

希望这个答案能帮助那些面临与我相同的问题的人。


答案 2

默认情况下,Laravel 会由于安全问题而限制跨域请求。我们需要创建一个 Cors 中间件来接受来自不同源的请求。

步骤 1:创建 Cors 中间件。

php artisan make:middleware Cors

步骤2:在返回之前在句柄函数中添加以下行。

//header('Access-Control-Allow-Origin:  *');
header('Access-Control-Allow-Origin:  http://localhost:4200');
header('Access-Control-Allow-Headers:  Content-Type, X-Auth-Token, Authorization, Origin');
header('Access-Control-Allow-Methods:  POST, PUT');

步骤 3 :在 app/Http/Kernel.php 文件中注册中间件。

Add below line in $middleware array 

\App\Http\Middleware\Cors::class,

步骤4:现在我们必须在app / Http / Kernel中调用中间件.php文件

Add below line in $routeMiddleware array 

'cors' => \App\Http\Middleware\Cors::class,

推荐