Laravel 8 中需在 config/cors.php 的 allowed_headers 中显式声明 X-Request-ID 等自定义头,确保 HandleCors 中间件启用且顺序正确,前端请求需匹配 withCredentials 配置,最后通过 $request->header() 获取。

在 Laravel 8 中添加自定义请求头(如 X-Request-ID、X-Client-Version 或业务所需的其他头),关键不在于“让前端发过来”,而在于**后端明确允许它被接收**——这由 Access-Control-Allow-Headers 响应头控制,必须在 CORS 配置中显式声明。
配置 allowed_headers 支持自定义头
编辑 config/cors.php,确保 allowed_headers 包含你要支持的自定义头名称:
- 用数组精确列出:
'allowed_headers' => ['Content-Type', 'Authorization', 'X-Requested-With', 'X-Request-ID', 'X-Client-Version'] - 开发阶段可临时用
['*'],但生产环境禁止使用通配符(部分浏览器和安全策略会拒绝*与supports_credentials => true共存) - 注意大小写不敏感,但建议统一用驼峰或短横线风格,与前端实际发送的一致
确保中间件顺序不影响头传递
自定义头能否被后端控制器/中间件读取,取决于它是否通过了 CORS 预检(OPTIONS)校验。若预检失败,浏览器根本不会发出后续真实请求:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 确认
Fruitcake\Cors\HandleCors已启用,并位于$middlewareGroups['api']中(推荐放在EnsureFrontendRequestsAreStateful之后、throttle:api之前) - 检查
paths配置是否覆盖你的接口路径,例如:'paths' => ['api/*', 'login', 'sanctum/csrf-cookie']—— 如果自定义头用于登录流程,login必须包含在内
前端发送时需带 withCredentials(如需 Cookie)
如果你的自定义头配合 Cookie 认证(如 Sanctum 的 session + XSRF-TOKEN),前端请求必须启用凭据:
- axios 示例:
axios.post('/api/data', {}, { withCredentials: true }) - fetch 示例:
fetch('/api/data', { credentials: 'include' }) - 此时后端
supports_credentials必须为true,且allowed_origins不能是*,必须写具体域名
验证是否生效
用浏览器开发者工具的 Network 标签页检查 OPTIONS 预检响应头:
- 查看是否有
Access-Control-Allow-Headers: Content-Type, Authorization, X-Request-ID - 确认真实请求的请求头中已包含你的自定义头(如
X-Request-ID: abc123) - 在控制器中用
$request->header('X-Request-ID')可直接获取该值

















