You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中间件添加Header后控制器调试无法获取问题咨询

问题核心原因

你在中间件里的写法是将Access-Control-Allow-Origin头添加到路由处理完成后返回的响应对象上,这个头只会返回给客户端,不会写入当前的请求对象中。而你在控制器中读取的是request请求对象携带的头,自然读不到,所以始终返回null。


对应解决方法

场景1:仅验证CORS头是否设置成功

不需要在控制器里读请求头,直接在请求发起后,通过浏览器控制台的「网络」标签,或者Postman等接口调试工具查看返回的响应头即可确认是否生效。

场景2:确实需要在控制器业务逻辑中获取该值

可以先把值存到请求属性中,再同步写到响应头里,修改后的代码如下:

  • 中间件代码:
public function handle(Request $request, Closure $next)
{
    // 先把CORS配置值存入请求属性,方便业务层读取
    $allowOrigin = '*';
    $request->attributes->set('access_control_allow_origin', $allowOrigin);

    $response = $next($request);
    // 再给响应添加CORS头
    return $response->header('Access-Control-Allow-Origin', $allowOrigin);
}
  • 控制器读取代码:
public function action()
{
    dd(request()->attributes->get("access_control_allow_origin"));
}

场景3:需要校验客户端请求的来源

如果你的需求是读取客户端发起跨域请求时自带的来源头,直接读取请求的Origin头即可:

public function action()
{
    dd(request()->headers->get("Origin"));
}

额外提示

你当前手动写的CORS中间件不完整,没有处理OPTIONS预检请求,实际使用时跨域请求依然会报错。Laravel 7及以上版本默认自带官方CORS中间件,直接配置config/cors.php即可满足绝大多数跨域需求,不需要自己手动实现。

内容的提问来源于stack exchange,提问作者sina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:57:03