Laravel 5.5需手动注册barryvdh/laravel-cors中间件至$middleware数组,位置须紧接TrustProxies之后、StartSession之前,并手动添加ServiceProvider及发布配置。

Laravel 5(特指 5.5)没有内置 CORS 支持,必须手动注册 cors 中间件,且不能加在路由分组或单个路由里——它属于基础设施类中间件,要放在全局中间件链中,位置很关键。
注册位置:app/Http/Kernel.php 的 $middleware 数组
不是 $middlewareGroups['web'] 或 $middlewareGroups['api'],也不是 route middleware 列表。正确做法是把 HandleCors 中间件显式加入 $middleware 数组,并确保顺序合理:
- 必须紧接在
\App\Http\Middleware\TrustProxies::class之后 - 必须早于
\Illuminate\Session\Middleware\StartSession::class和\App\Http\Middleware\EncryptCookies::class等依赖 session/cookie 的中间件 - 避免放在末尾,否则可能被前置中间件拦截或跳过
具体写法示例(Laravel 5.5)
打开 app/Http/Kernel.php,修改 $middleware 数组:
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\Barryvdh\Cors\HandleCors::class, // ✅ 正确位置:TrustProxies 后、Session 前
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
别漏掉服务提供者注册(Laravel 5.5 专属)
因为 Laravel 5.5 不支持自动发现,barryvdh/laravel-cors 必须手动注册服务提供者:
- 编辑
config/app.php - 在
'providers'数组末尾添加:Barryvdh\Cors\ServiceProvider::class, - 然后运行:
php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"生成配置文件
不推荐的注册方式
以下做法在 Laravel 5.5 中基本无效或埋坑:
- 用
fruitcake/laravel-cors(要求 Laravel 6+,安装后无配置文件、中间件不加载) - 只加在
$middlewareGroups['api']里(预检 OPTIONS 请求可能被跳过) - 仅通过
->middleware('cors')绑定到某条路由(Laravel 5.5 默认没预定义这个别名) - 把
HandleCors::class放在$middleware最底部(session 中间件已执行,CORS 头可能被覆盖或失效)


















