首页
/ Laravel CORS 配置详解:fruitcake/laravel-cors 配置指南

Laravel CORS 配置详解:fruitcake/laravel-cors 配置指南

2025-07-07 06:48:13作者:牧宁李

什么是 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,

最佳实践建议

  1. 生产环境安全配置:避免使用 ['*'] 通配符,明确指定允许的来源、方法和头
  2. 开发环境灵活配置:开发时可使用宽松配置,但部署前务必检查
  3. 合理设置缓存:对稳定不变的 API 设置适当的 max_age 减少预检请求
  4. 凭证安全:启用 supports_credentials 时要特别注意来源限制

常见问题解答

Q:为什么我的前端仍然收到 CORS 错误? A:检查配置是否已发布并缓存已清除,确保请求匹配配置的路径和方法。

Q:如何测试 CORS 配置? A:可以使用 Postman 或浏览器开发者工具检查响应头,或编写简单的前端测试代码。

Q:多个路径如何配置不同规则? A:fruitcake/laravel-cors 目前不支持路径级别的不同配置,需要统一规则或考虑中间件方案。

通过合理配置 fruitcake/laravel-cors,你可以轻松解决 Laravel 应用中的跨域问题,同时确保应用的安全性。