Lumen 9.1.2启用CORS分步指导请求:跨域API调用被拦截
Lumen 启用CORS解决跨域拦截的分步操作指导
针对你遇到的预检请求未返回HTTP OK状态导致的CORS拦截问题,以下是Lumen中配置CORS的具体步骤:
1. 创建CORS中间件
在app/Http/Middleware目录下新建CorsMiddleware.php文件,写入以下代码:
<?php namespace App\Http\Middleware; use Closure; class CorsMiddleware { public function handle($request, Closure $next) { // 配置CORS响应头,生产环境建议指定具体域名而非* $headers = [ 'Access-Control-Allow-Origin' => 'http://web.alopez.es:3000', 'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE', 'Access-Control-Allow-Credentials' => 'true', 'Access-Control-Max-Age' => '86400', 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-Requested-With' ]; // 直接响应预检OPTIONS请求,返回200 OK if ($request->isMethod('OPTIONS')) { return response()->json('', 200, $headers); } // 为其他请求添加CORS头 $response = $next($request); foreach ($headers as $key => $value) { $response->header($key, $value); } return $response; } }
提示:开发环境可将
Access-Control-Allow-Origin设为*,方便测试;生产环境必须指定前端实际域名,降低安全风险。
2. 注册中间件
打开bootstrap/app.php文件,完成两个配置:
- 注册路由中间件别名(可选,用于指定路由组):
$app->routeMiddleware([ // 保留原有中间件,新增以下行 'cors' => App\Http\Middleware\CorsMiddleware::class, ]);
- 全局注册中间件(让所有API路由都生效):
$app->middleware([ // 保留原有全局中间件,新增以下行 App\Http\Middleware\CorsMiddleware::class, ]);
如果你只想给特定路由启用CORS,可在路由定义时添加
->middleware('cors'),无需全局注册。
3. 验证配置
- 重启Lumen应用(若使用内置开发服务器,先终止进程再重新执行
php -S 0.0.0.0:8000) - 再次从前端发起请求,CORS拦截问题应已解决。
额外注意事项
- 若前端请求包含自定义请求头,需在
Access-Control-Allow-Headers中添加对应字段 - 若使用Nginx等反向代理,需确保服务器层面未覆盖CORS响应头
- 生产环境严格限制允许的源,避免跨域安全风险
内容的提问来源于stack exchange,提问作者Alejandro López
相关产品推荐
相关产品推荐

