thinkphp跨域请求(CORS)如何配置
发布时间 - 2025-09-25 00:00:00 点击率:次推荐使用中间件配置跨域,TP6通过创建CorsMiddleware设置响应头并拦截OPTIONS请求返回204状态码,TP5可在基类控制器中统一添加header,也可用Response对象或Nginx配置实现,关键在于正确处理预检请求。
ThinkPHP 实现跨域请求(CORS)主要通过设置响应头来允许浏览器进行跨域访问。以下是 ThinkPHP 5 和 ThinkPHP 6 的常见配置方式,适用于前后端分离项目。
1. 全局中间件配置(推荐,TP6)
在 ThinkPHP 6 中,推荐使用中间件统一处理 CORS 请求。步骤:
- 创建中间件:执行命令
php think make:middleware CorsMiddleware - 编辑中间件文件
app/middleware/CorsMiddleware.php
写入以下内容:
public function handle($request, \Closure $next)
{
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
if ($request->isOptions()) {
return response('', 204);
}
return $next($request);
}
注册中间件:在 app/middleware.php 中添加:
return [
// 其他中间件
\app\middleware\CorsMiddleware::class,
];
2. 在控制器中手动设置(适用于 TP5 或简单场景)
如果你使用的是 ThinkPHP 5 或只需要在某些接口开启跨域,可以在控制器的初始化方法中设置响应头。示例代码:
namespace app\controller;
use think\Controller;
use think\Response;
class BaseController extends Controller
{
public function initialize()
{
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
if (request()->isOptions()) {
exit();
}
}
}
让其他控制器继承 BaseController 即可自动支持跨域。
3. 使用 Response 对象返回(更规范)
在实际接口返回时,可以通过设置 Response 头部实现跨域。示例:
return json(['status' => 'success'])
->header([
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE',
'Access-Control-Allow-Headers' => 'Content-Type, Authorization',
])
4. Nginx 配置跨域(非 PHP 层)
如果希望由服务器直接处理跨域,可在 Nginx 配置中添加头部,适合生产环境。在 server 块中加入:
add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With';
注意:Nginx 方式更高效,但灵活性不如 PHP 层控制。
基本上就这些。根据你的 ThinkPHP 版本选择合适的方式,推荐 TP6 使用中间件,TP5 可用基类控制器统一处理。关键是拦截 OPTIONS 预检请求并正确返回 204 状态码。不复杂但容易忽略。
# php
# thinkphp
# js
# json
# nginx
# 浏览器
# app
# access
# 后端
# 跨域
# 状态码
# red
# 中间件
# 继承
# 接口
# 对象
# 推荐使用
# 适用于
# 可在
# 的是
# 中统
# 如果你
# 可以通过
# 只需要
# 头来
# 关键在于
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
个人摄影网站制作流程,摄影爱好者都去什么网站?
微信小程序 wx.uploadFile无法上传解决办法
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
如何快速启动建站代理加盟业务?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Android利用动画实现背景逐渐变暗
如何基于PHP生成高效IDC网络公司建站源码?
如何在服务器上三步完成建站并提升流量?
如何登录建站主机?访问步骤全解析
浅谈Javascript中的Label语句
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
android nfc常用标签读取总结
高防服务器租用首荐平台,企业级优惠套餐快速部署
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
南京网站制作费用,南京远驱官方网站?
如何在IIS中新建站点并解决端口绑定冲突?
Laravel如何处理CORS跨域请求?(配置示例)
轻松掌握MySQL函数中的last_insert_id()
北京网站制作公司哪家好一点,北京租房网站有哪些?
EditPlus中的正则表达式实战(6)
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何获取上海专业网站定制建站电话?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在IIS服务器上快速部署高效网站?
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
深圳网站制作的公司有哪些,dido官方网站?
浅谈javascript alert和confirm的美化
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Laravel如何使用Livewire构建动态组件?(入门代码)
如何在宝塔面板创建新站点?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
制作企业网站建设方案,怎样建设一个公司网站?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
如何在腾讯云服务器上快速搭建个人网站?
Python文件操作最佳实践_稳定性说明【指导】
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
如何快速登录WAP自助建站平台?
上一篇: ,怎么将图片做成网站链接?
下一篇:快速建站需多久?多久能上线?
上一篇: ,怎么将图片做成网站链接?
下一篇:快速建站需多久?多久能上线?

