首页 > 解决方案 > 基于 Clean-Laravel-Api 项目的 Laravel Api 的 CORS 问题

问题描述

我正在尝试基于 gentritabazi01/Clean-Laravel-Api和 Laravel8 的 larapi 制作和 api 服务。当我从不同的服务器向我的 api 发出请求时,我无法解决 CORS 的问题。相关内容如下:

从源“http://segu........com”访问“https://dev........com/users”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

从两天前开始,我一直在阅读 CORS 和 Laravel 的文档,任何解决方案都可以解决我的问题。我尝试创建一个中间件并添加必要的标头:

//Infrastructure\Http\Middlewares\Cors
    <?php
    use Closure;
    class Cors
    {
      public function handle($request, Closure $next)
      {
        return $next($request)
           //Url a la que se le dará acceso en las peticiones
          ->header("Access-Control-Allow-Origin", "*")
          //Métodos que a los que se da acceso
          ->header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
          //Headers de la petición
          ->header("Access-Control-Allow-Headers", "*"); 
      }
    }

我尝试使用来自 laravel的Fruitcake包,就像在基础项目中使用的一样。

//Infrastructur/Http/Kernel.php
    class Kernel extends HttpKernel
    {
        /**
         * The application's global HTTP middleware stack.
         *
         * These middleware are run during every request to your application.
         *
         * @var array
         */
        protected $middleware = [
            \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
            \Infrastructure\Http\Middlewares\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
            \Fruitcake\Cors\HandleCors::class,
        ];

我试图在 /public 文件夹中添加 index.php 文件中缺少的标题。

//public/index.php
use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;

define('LARAVEL_START', microtime(true));
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json; charset = UTF-8');

有人知道如何解决吗?如果有必要,我可以添加更多代码。

标签: apicorslaravel-8

解决方案


最后,我找到了解决方案。我在我的项目中删除了所有与 cors 相关的内容,并将其添加到 public/web.config 文件中:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Headers" value="*" />
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>

我在 system.webServer 标记中写了这个,我的项目又开始工作了。


推荐阅读