0

0

Laravel怎么开启跨域访问 _ Laravel CORS跨域中间件配置方法【经验】

穿越時空

穿越時空

发布时间:2026-02-16 12:18:11

|

179人浏览过

|

来源于php中文网

原创

cors中间件未生效主因是注册顺序错误,须将handlecors置于kernel.php的$middleware顶部,确保laravel 9+内置支持或旧版正确安装fruitcake包,并同步nginx对options请求的处理与config/cors.php配置。

laravel怎么开启跨域访问 _ laravel cors跨域中间件配置方法【经验】

为什么 cors 中间件没生效?

大多数情况不是没配,而是配在了错误的位置。Laravel 的 CorsServiceProvider 必须在 AppServiceProvider 之前注册,否则中间件加载顺序错乱,HandleCors 根本不会被调用。检查 config/app.phpproviders 数组,确保 Illuminate\Http\Middleware\HandleCors::class 没被手动删掉,且 fruitcake/laravel-cors 的服务提供者(如使用旧版)已正确注册。

常见错误现象:OPTIONS 请求返回 404 或 500,浏览器控制台显示 “No 'Access-Control-Allow-Origin' header”,但后端日志里完全没看到请求进到路由层——大概率是中间件根本没挂上。

  • 确认 Laravel 版本:9+ 已内置 CORS 支持,无需额外装包;8 及以下才需 fruitcake/laravel-cors
  • 若用自定义中间件,别把它只加在某个路由组里,要全局注册到 app/Http/Kernel.php$middleware 数组顶部(不是 $middlewareGroups['api']
  • 别在 handle() 里手动 return response()->header(...),这会绕过 Laravel 的响应生命周期,Header 可能被后续逻辑覆盖

config/cors.php 里哪些配置真会影响生产环境?

真正起作用的只有几个关键键: allowed_originsallowed_methodsallowed_headersexposed_headers。其他如 max_age 主要影响预检缓存,supports_credentials 则直接决定能否带 cookie 请求。

使用场景:前端跑在 http://localhost:3000,后端是 https://api.example.com,此时 allowed_origins 必须精确匹配协议+域名+端口,写成 ['*'] 会导致 supports_credentials => true 失效(浏览器禁止)。

  • allowed_origins 建议用数组明确列出,避免线上误开 ['*'];开发环境可临时设为 ['http://localhost:3000']
  • allowed_methods 不要盲目写 ['*'],有些服务器(如 Nginx)会拦截未知 method,建议显式写 ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
  • exposed_headers 如果前端要用 response.headers.get('X-RateLimit-Remaining'),就必须把 X-RateLimit-Remaining 加进去,否则 JS 拿不到

为什么本地能通,部署到 Nginx 就跨域失败?

因为 Nginx 默认不转发 OPTIONS 请求给 PHP-FPM,而是自己处理并返回空响应,导致 Laravel 的 CORS 中间件压根没机会执行。这是最常被忽略的环节。

今天学点啥
今天学点啥

秘塔AI推出的AI学习助手

下载

性能影响:Nginx 拦截预检请求其实更快,但前提是它得按规范返回正确的 CORS Header,不能只靠 Laravel。

  • 在 Nginx 配置中加入对 OPTIONS 的显式处理:
    if ($request_method = 'OPTIONS') {
        add_header Access-Control-Allow-Origin 'https://your-frontend.com';
        add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';
        add_header Access-Control-Allow-Headers 'Content-Type, Authorization';
        add_header Access-Control-Allow-Credentials 'true';
        add_header Access-Control-Max-Age 86400;
        return 204;
    }
  • 同时 Laravel 的 config/cors.phpallowed_origins 要和 Nginx 里写的保持一致,否则前后 Header 冲突
  • 别依赖 add_header 在 server 块里全局写——它不继承,必须放在 location 块内,且对 root 和 API 路径分别配置

API 路由加了 api 中间件组,CORS 还要单独处理吗?

要。Laravel 的 api 中间件组默认不包含 CORS,它只含 throttle:apibindings。即使你用了 Route::middleware('api'),也不代表自动支持跨域。

容易踩的坑:有人以为在 routes/api.php 里写路由就“天然 API 化”,结果发现 OPTIONS 404,其实是没意识到 Laravel 并不自动为该文件启用任何跨域逻辑。

  • 最稳妥做法:在 app/Http/Kernel.php$middleware 数组第一项加上 \Illuminate\Http\Middleware\HandleCors::class
  • 如果只想对 API 生效,可改用 $middlewareGroups['api'],但注意这个数组默认不含 HandleCors,要手动追加
  • 别在控制器构造函数里用 $this->middleware('cors') —— 它只对当前控制器生效,且无法处理预检请求(OPTIONS 不走控制器)

真正麻烦的从来不是配哪几行代码,而是得同时盯住 Laravel 配置、中间件注册顺序、Web 服务器转发规则、浏览器预检机制四块地方。漏掉任意一环,跨域就静默失败。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

332

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

285

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

581

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

379

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

131

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

78

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

69

2025.08.05

nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

240

2023.07.27

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号