没有'Access-Control-Allow-Origin'标头-Laravel 5.4

Ker*_*ter 7 php cors laravel laravel-5

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

我不知道为什么我不能提出CORS请求。我已经在此处安装了中间件,并将其添加到了全局http内核中,但是仍然无法正常工作。尝试创建给定stackoverflow建议的自定义中间件,但这也行不通。还尝试添加路由组。最后,我尝试在请求操作中手动设置响应头。我真的很困-感谢您的帮助!

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

Rah*_*rve 16

如果您使用Laravel 5.5&Laravel 5.x并遇到类似的问题No 'Access-Control-Allow-Origin' header is present on the requested resource。只需使用以下软件包并配置您的系统即可。

步骤1:

composer require barryvdh/laravel-cors
Run Code Online (Sandbox Code Playgroud)

第2步

您还需要添加Cors\ServiceProvider到您的config/app.php提供者数组:

Barryvdh\Cors\ServiceProvider::class,
Run Code Online (Sandbox Code Playgroud)

要允许CORS所有路线,请HandleCors在class $middleware属性中添加中间件app/Http/Kernel.php:

供全球使用:

protected $middleware = [
    // ...
    \Barryvdh\Cors\HandleCors::class,
];
Run Code Online (Sandbox Code Playgroud)

对于中间件使用:

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

   'api' => [
        // ...
        \Barryvdh\Cors\HandleCors::class,
    ],
];
Run Code Online (Sandbox Code Playgroud)

第三步

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

php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"
Run Code Online (Sandbox Code Playgroud)

希望这个答案能帮助面临与我自己同样问题的人。

  • 在 config/app.php 中,我们必须添加此 Fruitcake\Cors\CorsServiceProvider::class, (3认同)

Anu*_*ari 15

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

第 1 步:创建 Cors 中间件。

php artisan make:middleware Cors
Run Code Online (Sandbox Code Playgroud)

第 2 步:在返回前在 handle 函数中添加以下几行。

//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');
Run Code Online (Sandbox Code Playgroud)

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

Add below line in $middleware array 

\App\Http\Middleware\Cors::class,
Run Code Online (Sandbox Code Playgroud)

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

Add below line in $routeMiddleware array 

'cors' => \App\Http\Middleware\Cors::class,
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是唯一对我有用的东西。我相信其他答案(或我在网上看到的东西)没有提到我们需要将中间件添加到“$middleware”数组中。 (2认同)

小智 5

https://github.com/barryvdh/laravel-cors

laravel-cors软件包使您可以使用Laravel中间件配置发送跨域资源共享标头。

特征

处理CORS飞行前OPTIONS请求将CORS标头添加到您的响应中