Laravel如何处理CORS跨域请求?(配置示例)

发布时间 - 2025-12-16 00:00:00    点击率:
最推荐使用 fruitcake/laravel-cors 包(Laravel 9+ 已内置),通过配置 Cors 中间件并正确设置 allowed_origins 与 supports_credentials,确保 API 路由启用且响应头生效。

在 Laravel 中处理 CORS 跨域请求,最推荐的方式是使用官方维护的 fruitcake/laravel-cors 包(Laravel 9+ 已内置支持,无需额外安装),通过配置中间件统一控制响应头。

启用并配置 CORS 中间件

Laravel 默认已注册 Cors 中间件(位于 app/Http/Kernel.php$middleware$middlewareGroups 中)。确保 API 路由组(如 api)已应用该中间件:

// app/Http/Kernel.php
protected $middlewareGroups = [
    'api' => [
        \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Fruitcake\Cors\HandleCors::class, // ✅ 确保这一行存在
    ],
];

发布并修改 CORS 配置文件

运行命令生成配置文件(Laravel 9+ 可跳过,但建议仍执行以自定义):

php artisan vendor:publish --provider="Fruitcake\Cors\CorsServiceProvider"

然后编辑 config/cors.php,常见安全又实用的配置示例如下:

return [
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['http://localhost:3000', 'https://your-frontend.com'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 3600,
    'supports_credentials' => true, // 若需携带 Cookie 或 Authorization
];
  • paths:指定哪些 URL 前缀启用 CORS,如 api/* 表示所有 API 接口
  • allowed_origins:不要写 *(与 supports_credentials => true 冲突),应明确列出前端域名
  • supports_credentials:设为 true 时,前端必须设置 credentials: 'include',后端才能读取 Cookie 或发送带认证的请求

针对特定路由临时关闭或调整 CORS

如果某接口需要特殊处理(比如允许任意源调试),可在路由定义中单独指定中间件参数:

// routes/api.php
Route::get('/public-data', [DataController::class, 'index'])
    ->middleware('cors:{"allowedOrigins":["*"],"supportsCredentials":false}');

⚠️ 注意:生产环境避免使用 "*" 作为 allowedOrigins,尤其开启凭证时会直接被浏览器拒绝。

验证响应头是否生效

发起一个跨域请求(如用 fetch 访问 http://localhost:8000/api/user),检查响应头中是否包含:

  • Access-Control-Allow-Origin: http://localhost:3000
  • Access-Control-Allow-Credentials: true(如果启用了凭证)
  • Access-Control-Allow-Headers: * 或具体列表

若缺失,检查中间件是否正确注册、配置是否被缓存(可运行 php artisan config:clear)。

基本上就这些。CORS 不复杂但容易忽略细节,重点就是配对 allowed_originssupports_credentials,再确认中间件跑在目标路由上。


# php  # laravel  # 前端  # cookie  # 浏览器  # app  # access  # 后端  # 路由  # 跨域  # 配置文件  # red  # 中间件  # include 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何快速搭建高效WAP手机网站?  网站图片在线制作软件,怎么在图片上做链接?  详解Oracle修改字段类型方法总结  原生JS实现图片轮播切换效果  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel怎么清理缓存_Laravel optimize clear命令详解  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  如何快速搭建个人网站并优化SEO?  微信小程序 input输入框控件详解及实例(多种示例)  如何快速查询网址的建站时间与历史轨迹?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  如何快速上传自定义模板至建站之星?  Laravel如何实现用户密码重置功能?(完整流程代码)  Swift中swift中的switch 语句  如何在Tomcat中配置并部署网站项目?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  制作旅游网站html,怎样注册旅游网站?  如何在宝塔面板中创建新站点?  如何在橙子建站中快速调整背景颜色?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  高端建站三要素:定制模板、企业官网与响应式设计优化  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  如何自定义建站之星网站的导航菜单样式?  如何在阿里云ECS服务器部署织梦CMS网站?  如何获取上海专业网站定制建站电话?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Android利用动画实现背景逐渐变暗  用v-html解决Vue.js渲染中html标签不被解析的问题  iOS UIView常见属性方法小结  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  怎样使用JSON进行数据交换_它有什么限制  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  Linux系统命令中tree命令详解  如何彻底删除建站之星生成的Banner?  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  详解jQuery停止动画——stop()方法的使用