讲师中心 微信公众号
AI工具推荐 视频效率加速

Yii2.0.50跨域请求CORS配置【API安全】

星明吖_9662

星明吖_9662

发布时间:2026-08-06 20:43:15

|

794人浏览过

|

来源于php中文网

原创

Yii 2.0.50需配置CORS以支持跨域API调用:全局在config/web.php中通过response组件添加Access-Control-Allow-Origin等响应头,并在urlManager中配置'OPTIONS *'路由指向SiteController::actionOptions()处理预检请求;生产环境应限制Origin并启用Access-Control-Allow-Credentials。

yii2.0.50跨域请求cors配置【api安全】

Yii 2.0.50项目对外提供API时,前端页面(如Vue或React单页应用)从不同域名发起AJAX请求,浏览器因同源策略拦截响应,控制台报错“CORS header ‘Access-Control-Allow-Origin’ missing”,必须在服务端显式配置CORS响应头才能放行。

全局启用CORS中间件

打开 config/web.php,在 components 数组内添加 response 组件配置:

→ 在 'components' => [ 下新增以下键值对:

'response' => [
  'class' => 'yii\web\Response',
  'on beforeSend' => function ($event) {
    $response = $event->sender;
    $response->headers->add('Access-Control-Allow-Origin', '*');
    $response->headers->add('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    $response->headers->add('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
    $response->headers->add('Access-Control-Expose-Headers', 'X-Pagination-Total-Count, X-Pagination-Page-Count, X-Pagination-Current-Page, X-Pagination-Per-Page');
  },
],

这一步直接注入响应头,覆盖所有控制器动作的输出。但注意:【OPTIONS预检请求不会触发action逻辑,仅靠此配置无法响应OPTIONS】——必须配合下一步路由拦截。

拦截并响应OPTIONS预检请求

Yii默认不处理OPTIONS方法,浏览器发出的预检请求会直接返回405或404。需在URL规则中显式捕获:

→ 打开 config/web.php → 找到 urlManager 配置块 → 在 'rules' => [ 内最顶部插入:

'' => 'site/index', // 兜底规则,不可删
'<strong>OPTIONS *</strong>' => 'site/options', // 关键:匹配任意路径的OPTIONS请求

→ 创建 controllers/SiteController.php,在类中添加:

public function actionOptions()
{
  return null; // 空响应体,仅返回204状态码和CORS头
}

这一步让所有OPTIONS请求落到 SiteController::actionOptions(),由框架自动附加CORS头并返回204。不写这一行,前端发POST前的OPTIONS会被拒绝,后续请求根本发不出去。

按模块/控制器精细化控制CORS

若生产环境要求限制允许来源(如只允许 https://admin.example.com),不能用 *,需动态判断 Origin:

方法一:修改 response 组件中的 on beforeSend 回调

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载

将原 $response->headers->add('Access-Control-Allow-Origin', '*'); 替换为:

$origin = Yii::$app->request->getHeaders()->get('Origin');
$allowedOrigins = ['https://admin.example.com', 'https://shop.example.com'];
if (in_array($origin, $allowedOrigins)) {
  $response->headers->add('Access-Control-Allow-Origin', $origin);
  $response->headers->add('Access-Control-Allow-Credentials', 'true'); // 若前端设 withCredentials=true,此行必加
}

方法二:使用行为(Behavior)在特定控制器中启用

→ 在控制器类(如 controllers/ApiController.php)顶部添加:

use yii\filters\Cors;
use yii\helpers\ArrayHelper;

→ 在 public function behaviors() 中返回:

return ArrayHelper::merge(parent::behaviors(), [
  'corsFilter' => [
    'class' => Cors::className(),
    'cors' => [
      'Origin' => ['https://admin.example.com'],
      'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
      'Access-Control-Request-Headers' => ['*'],
      'Access-Control-Allow-Credentials' => true,
    ],
  ],
]);

行为方式更安全,避免全局污染;但需确保该控制器继承自 yii\rest\Controller 或手动启用 ContentNegotiator,否则JSON响应可能出错。

验证CORS是否生效

第一步:启动服务,用 curl 检查响应头

curl -H "Origin: https://admin.example.com" -I http://localhost:8080/api/v1/users

第二步:观察返回中是否含 Access-Control-Allow-Origin: https://admin.example.com 和 Access-Control-Allow-Methods 等字段

第三步:在浏览器开发者工具 Network 标签页中,点开任意一个API请求 → 查看 Response Headers → 确认 CORS 头存在且值正确

第四步:若前端仍报错,检查是否漏配 Access-Control-Allow-Credentials ——只要前端 AJAX 设置了 withCredentials: true,后端就必须返回该头且值为 true,同时 Access-Control-Allow-Origin 不能为 *。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

524

2025.11.26

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2910

2025.09.04

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

80

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

80

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

40

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

60

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

280

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

160

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn