laravel 7 中需在 config/cors.php 中配置 maxage(非 max_age)为整数秒值,如3600,修改后运行 php artisan config:clear 生效,使响应头 access-control-max-age: 3600 控制预检缓存时间。

在 Laravel 7 中,max_age 是 CORS 预检请求(OPTIONS)响应头 Access-Control-Max-Age 的值,用于控制浏览器缓存预检结果的时间(单位:秒)。Laravel 7 自带的 fruitcake/laravel-cors 包(v1.x 版本)支持该配置,但不能直接写 max_age 字段——它使用的是 maxAge(驼峰命名),且需通过配置文件或中间件参数显式设置。
✅ 正确设置 maxAge 的方法
Laravel 7 默认使用 fruitcake/laravel-cors v1.0+,其配置位于 config/cors.php。你需要修改该文件中的 max_age 对应项为 maxAge:
// config/cors.php
return [
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_origins' => ['https://your-frontend.com', 'http://localhost:3000'],
'allowed_origins_patterns' => [],
'allowed_methods' => ['*'],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'maxAge' => 3600, // ← 这里是关键:用 maxAge(不是 max_age),单位秒
'supports_credentials' => true,
];
⚠️ 注意:
- 键名必须是
'maxAge'(首字母大写),写成'max_age'或'max-age'均无效;- 值为整数,例如
3600表示缓存 1 小时;设为0表示不缓存(每次预检都发 OPTIONS);- 修改后需运行
php artisan config:clear生效。
? 它最终生成的响应头效果
当浏览器发起预检请求时,Laravel 会返回:
Access-Control-Max-Age: 3600
这告诉浏览器:该预检结果可缓存 3600 秒,在此期间同类请求不再触发新的 OPTIONS 请求。
❗常见误区提醒
- 不要试图在控制器或路由中手动
header('Access-Control-Max-Age: 3600')—— CORS 中间件会覆盖它; - 如果你启用了
supports_credentials => true,allowed_origins仍必须写具体域名,maxAge设置不受影响,但安全逻辑仍需遵守; -
maxAge只对非简单请求(如带Authorization头、Content-Type: application/json、PUT/DELETE等)的预检生效,简单请求(如GET+text/plain)不走预检,也不受此值影响。
不复杂但容易忽略。











