Laravel CORS 配置详解:fruitcake/laravel-cors 配置指南
什么是 CORS?
CORS(Cross-Origin Resource Sharing,跨域资源共享)是现代 Web 开发中处理跨域请求的重要机制。在 Laravel 项目中,fruitcake/laravel-cors 是一个广泛使用的 CORS 解决方案包,它简化了跨域请求的处理流程。
配置项详解
paths 路径配置
paths
数组定义了需要启用 CORS 的 API 路由路径。例如,如果你只想对 api/
下的所有路由启用 CORS,可以这样配置:
'paths' => ['api/*'],
allowed_methods 允许的 HTTP 方法
allowed_methods
指定允许的 HTTP 请求方法。默认配置 ['*']
表示允许所有方法(GET、POST、PUT、DELETE 等)。如果只需要特定方法,可以明确指定:
'allowed_methods' => ['GET', 'POST'],
allowed_origins 允许的来源
allowed_origins
定义了允许访问资源的来源(域名)。默认 ['*']
表示允许所有来源,但在生产环境中建议明确指定允许的域名:
'allowed_origins' => ['https://example.com', 'https://app.example.com'],
allowed_origins_patterns 来源匹配模式
当需要更灵活的来源匹配时,可以使用正则表达式模式:
'allowed_origins_patterns' => ['/^https:\/\/.+\.example\.com$/'],
这会匹配所有 example.com
的子域名。
allowed_headers 允许的请求头
allowed_headers
指定允许的请求头。默认 ['*']
允许所有头,但可以限制为特定头:
'allowed_headers' => ['X-Custom-Header', 'Content-Type'],
exposed_headers 暴露的响应头
exposed_headers
定义浏览器可以访问的响应头。例如,如果你有自定义响应头需要前端访问:
'exposed_headers' => ['X-Custom-Response-Header'],
max_age 预检请求缓存时间
max_age
设置预检请求(OPTIONS)的缓存时间(秒)。设置为 0 表示不缓存:
'max_age' => 86400, // 缓存24小时
supports_credentials 凭证支持
supports_credentials
决定是否允许携带凭证(如 cookies、授权头等)。设置为 true 时,allowed_origins
不能为 ['*']
:
'supports_credentials' => true,
最佳实践建议
- 生产环境安全配置:避免使用
['*']
通配符,明确指定允许的来源、方法和头 - 开发环境灵活配置:开发时可使用宽松配置,但部署前务必检查
- 合理设置缓存:对稳定不变的 API 设置适当的
max_age
减少预检请求 - 凭证安全:启用
supports_credentials
时要特别注意来源限制
常见问题解答
Q:为什么我的前端仍然收到 CORS 错误? A:检查配置是否已发布并缓存已清除,确保请求匹配配置的路径和方法。
Q:如何测试 CORS 配置? A:可以使用 Postman 或浏览器开发者工具检查响应头,或编写简单的前端测试代码。
Q:多个路径如何配置不同规则? A:fruitcake/laravel-cors 目前不支持路径级别的不同配置,需要统一规则或考虑中间件方案。
通过合理配置 fruitcake/laravel-cors,你可以轻松解决 Laravel 应用中的跨域问题,同时确保应用的安全性。