Yii2:如何在非 Restful API 上允许 CORS

2023-11-24

我正在 Yii2 Framework 上使用预构建的 API(不是 Restfull)。它使用 JSON 数据进行响应,并根据用户类型和凭证令牌接受请求。现在我必须制作一个位于不同位置(域)的应用程序,这会导致 CORS 冲突。

我的应用程序是 jQuery 并且我正在使用$.ajax用于数据发送和接收。 如何避免这种 CORS 冲突并通过 ajax 使用 API?

Regards

UPDATE:

正如 IStranger 在他的回答中告诉我的那样,我添加了以下代码:

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['corsFilter'] = [
        'class' => \yii\filters\Cors::className(),
        'cors' => [
            'Origin'                           => "*",
            'Access-Control-Request-Method'    => ['POST', 'GET'],
            'Access-Control-Allow-Credentials' => true,
            'Access-Control-Max-Age'           => 3600,
        ],
    ];
    return $behaviors;
}

但我仍然收到错误。有一个beforeAction在代码中这会是一个问题吗?

这是原始标题

Request:

Host: domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost/main/main.html
Content-Length: 296
Origin: http://localhost
Connection: keep-alive

回复:

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Content-Length: 101
Content-Type: application/json; charset=UTF-8
Date: Thu, 22 Sep 2016 17:23:48 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=5, max=100
Pragma: no-cache
Server: Apache/2.4.17 (Win64) PHP/5.6.16
Set-Cookie: PHPSESSID=ph0b322gbq65m1f3m8fp9fphc0; path=/; HttpOnly
X-Powered-By: PHP/5.6.16

只需添加到您的 API 控制器:

/**
 * List of allowed domains.
 * Note: Restriction works only for AJAX (using CORS, is not secure).
 *
 * @return array List of domains, that can access to this API
 */
public static function allowedDomains()
{
    return [
        // '*',                        // star allows all domains
        'http://test1.example.com',
        'http://test2.example.com',
    ];
}

/**
 * @inheritdoc
 */
public function behaviors()
{
    return array_merge(parent::behaviors(), [

        // For cross-domain AJAX request
        'corsFilter'  => [
            'class' => \yii\filters\Cors::className(),
            'cors'  => [
                // restrict access to domains:
                'Origin'                           => static::allowedDomains(),
                'Access-Control-Request-Method'    => ['POST'],
                'Access-Control-Allow-Credentials' => true,
                'Access-Control-Max-Age'           => 3600,                 // Cache (seconds)
            ],
        ],

    ]);
}

此代码将添加到响应特殊的 http 标头。请求http header应该有Origin(跨域 AJAX 时浏览器会自动添加)。响应http标头应该有Access-Control-*标头。

NOTE:如果您在响应中没有看到这些 http 标头,可能意味着\yii\filters\Cors不工作。检查控制器中的其他行为/过滤器。尝试禁用此控制器的 CSRF 验证(它可能会阻止外部访问):

/**
 * Controller for API methods.
 */
class ApiController extends Controller
{

    /**
     * @var bool See details {@link \yii\web\Controller::$enableCsrfValidation}.
     */
    public $enableCsrfValidation = false;

    // ...
}

UPD:另外应该检查您的网络服务器。 nginx 可能需要额外的配置,apache 可能需要重新启动。

UPD2:更完整的说明在这里:https://stackoverflow.com/a/42435695/3793592

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Yii2:如何在非 Restful API 上允许 CORS 的相关文章

  • SAPUI5 等待延迟对象 // 等待 .done() 函数

    我知道有几个线程对此进行讨论 但我认为在 SAPUI5 上下文中没有线程回答有关 SAPUI5 中的延迟 同步调用的一般主题 在我的控制器中我得到 test function var dfd Deferred var sServiceUrl
  • Facebook 自定义故事与大图像 - 使用 Javascript 打开图

    我正在尝试创建一个自定义故事 每次有人尝试发布它时都会有一个新图像 现在我创建了一个对象 以及将两者结合起来的动作和故事 我想要实现的是一个看起来像这样的故事https fbcdn dragon a akamaihd net hphotos
  • 如何从 Javascript/Typescript 中的数组对象计算运行总计并使用 HTML 在每个实例上显示输出?

    我正在开发一个 MEAN 堆栈项目 并且有一个如下所示的数组 savings any 300 450 350 500 我还有一个名为 saving bf 的变量 它是从数据库中检索的结转储蓄 其值如下 savings bf 15000 我想
  • 三.js环境光意想不到的效果

    在下面的代码中 我渲染了一些立方体并使用点光源和环境光照亮它们 然而 当设置为 0xffffff 时 AmbientLight 会将侧面的颜色更改为白色 无论其指定的颜色如何 奇怪的是 点光源按预期工作 我怎样才能使环境光表现得像点光 因为
  • Chrome JavaScript 日期构造函数获取 1884 年之前的日期似乎是错误的

    如果我将 1 1 1753 午夜 的 unix 毫秒时间戳值 6847786800000 传递给 Chrome 中的 JavaScript Date 构造函数 则 Chrome 给出的日期看起来非常奇怪 当我使用带有七个参数的 Date 构
  • IE8 中空 div 层的 z-index 问题

    我在 IE8 中遇到 z index 问题 其他尚未测试 以下 JS 创建一些 html css document write img src border 0 document write div style background col
  • 创建 html 结构,每个 li 中仅允许 3 个 div 元素。在 React + underscore.js 中

    这是以下内容的位副本如何创建每个 li 中仅允许 3 个 div 元素的 html 结构 在 React underscore js 中 https stackoverflow com questions 38008023 how to c
  • Browserify:如果需要,使用 module.exports,否则暴露全局

    我正在考虑采用浏览器化 http browserify org 对于我的一些项目 但想确保其他人如果想使用 捆绑的 代码就不必使用 browserify 执行此操作的明显方法是通过以下方式公开模块导出module exports以及通过一个
  • 动态更改 vuejs 2 中的选择输入选项

    如何动态更改选择下拉 v model 中的选项 我有 2 个选择输入 其中一个应该根据其他输入进行更改 例如 如果我选择 水果 则选择显示水果 如果我选择 蔬菜 则选择显示蔬菜 我不使用Vuejs 但查看文档后 var TypesArr F
  • Intro.js 2页然后返回首页

    我在用intro js http introjs com 为我的网站创建一个小介绍 我希望游览从第 1 页 主页 2 另一页 然后回到第 1 页 主页 我已经成功地从第 1 2 页开始 但不确定如何让它返回到第 1 页 我对 javascr
  • 在 Chrome 中加载analytics.js时出现307重定向

    我正在构建一个网络应用程序并使用 Google Analytics analytics js 进行分析 我最近注意到 Chrome 中的分析功能无法正常工作 我使用单独模块中的标准代码片段加载分析并通过 requirejs 包含 我已验证该
  • 可选回调的 JavaScript 样式

    我有一些函数偶尔 并非总是 会收到回调并运行它 检查回调是否已定义 函数是一种好的风格还是有更好的方法 Example function save callback do stuff if typeof callback undefined
  • 我们如何使用 thymeleaf 绑定对象列表的列表

    我有一个表单 用户可以在其中添加任意数量的内容表对象这也可以包含他想要的列对象 就像在 SQL 中构建表一样 我尝试了下面的代码 但没有任何效果 并且当我尝试绑定两个列表时 表单不再出现 控制器 ModelAttribute page pu
  • Onblur 事件在另一个 div 的 onclick 之前触发

    如上所述 我有一个按钮 单击该按钮将打开子菜单 对于子菜单中的每个选项 都有三个元素 我认为实际上还有更多元素 但为了简单起见 将其保留为 3 我将焦点放在子菜单的主 div 白色 框架 上 Onblur 这个 div 然后我隐藏子菜单 这
  • jquery ajax加载后丢失CSS

    大家知道如何解决 load Ajax 请求后的 css 问题吗 例如 如果我想从网页加载 DIV 在我的 Ajax 请求之后 container load path to div div id 我丢失了与该 div 关联的所有 css 和脚
  • Facebook API Javascript JSON 响应

    function getUser FB api me function response console log Response is response alert Your name is response first name ale
  • 如何使用 Jquery .animate() 函数创建连续滚动内容? [复制]

    这个问题在这里已经有答案了 可能的重复 在jquery中实现圆形滚动条 https stackoverflow com questions 812049 implementing circular scroller in jquery 我想
  • 如何在具有现有记录的 json 数据表顶部添加新行

    我试图在数据表顶部添加一行 显示 金额 列的总和 我正在使用 json 数据表 jquery 插件 列表来显示数据表 如何将此行与现有行一起添加到数据表顶部 我认为这段代码会对你有所帮助 var json uid user123 first
  • 什么是 TinyMCE jQuery 包?

    我被要求在项目中使用 TinyMCE 编辑器 在下载页面上 有一个主包 然后是一个 jQuery 包 This package contains special jQuery build of TinyMCE and a jQuery in
  • JavaScript 中“键”的类型是什么?

    当我失去焦点并开始思考一个愚蠢的问题时 我遇到了这样的时刻 var a b value b 的类型是什么 我的意思不是 值 的类型 而是标记为 b 的实际键 背景 当我必须创建一个字符串键时 我开始想知道这一点 var a b value

随机推荐

  • 如何使用 LLVM 传递中的现有函数传递?

    我一直在使用 LLVM 但我很困惑如何使用与我自己的通行证不同的已存在通行证 准确地说 我的程序需要针对任何给定指令进行优势前沿计算 LLVM 已经具有作为函数传递实现的 Dominance 函数类 我如何在我的模块通行证中调用它 使用它
  • 有没有一种简单安全的方法将 PrintWriter 转换为 PrintStream?

    有没有一种干净简单的方法来转换实例java io PrintWriter into a java io PrintStream 首先获得一个OutputStream来自Writer See 这个问题 然后将其作为参数传递给PrintStre
  • R:在朋友组中最佳地共享 Cookie

    我正在使用 R 编程语言 假设有 100 人 每个人都用 1 100 开始的 ID 表示 每个人都可以与其他人成为朋友 数据集可以用图形 网络格式表示 如下所示 Set the seed for reproducibility set se
  • Selenium 作为 Windows 服务运行以获取错误屏幕截图

    我想要一个基于 Selenium RC 的自动化 Web 测试套件 以便在遇到某些错误时截取页面的屏幕截图 该测试套件是持续集成过程的一部分 从技术上讲 由作为运行的 CruiseControl 执行Windows服务 The seleni
  • JavaScript 写入文本文件

    我正在尝试从表单中获取输入并将其保存到与 html 文件位于同一文件夹中的文本文件中 这是我到目前为止所拥有的
  • Spring 3:如何从 TaskExecutor 调用 @Async 注解的方法

    我是 Spring 异步任务执行的新手 所以如果这听起来像一个愚蠢的问题 请原谅我 我读到 Async 注释是从 Spring 3 x 开始在方法级别引入的 该方法的调用将异步发生 我还读到我们可以在 spring 配置文件中配置 Thre
  • 如何使用 Perl 轻松批量重命名文件?

    我有很多文件正在尝试重命名 我尝试创建一个正则表达式来匹配它们 但即使如此 我仍然卡在文件的命名上 如下所示 文件名01 文件名 100 文件名02 文件名03 等等 我想在任何小于 100 的文件后面添加一个 0 零 如下所示 文件名00
  • JavaFX - 等待任务完成

    我有一个 JavaFX 应用程序 它实例化了几个Task对象 目前 我的实现 见下文 调用行为运行工厂 它在任务对象下执行计算 与此平行的是 下一个函数 被调用 有没有办法拥有下一个函数 等待 直到先前的任务完成 我明白线程 join 等待
  • 树莓派自动登录无需etc/inittab

    我想将我的 Raspberry Pi 设置为以特定用户自动登录 我用谷歌搜索了这个 我找到的解决方案是关于编辑 etc inittab 文件 我的问题是现在我没有该文件 它在我的 Raspbian 版本中似乎丢失了 还有其他方法可以做到这一
  • 相当于 X11 中的“无效矩形”/“WM_PAINT”

    我正在将一些代码从 Windows 移植到 XLib 在Windows代码中 我可以通过调用强制重绘InvalidateRect然后处理相应的WM PAINT信息 但是 我无法找到如何在 X11 XLib 中执行此操作 我看到有一个Expo
  • 使用 javascript 将内容添加到表格行 ()?

    我有一个表如下 table tr td col 1 td td col2 td tr tr td field td td Field 2 td tr tr td another field td td one more field td t
  • MySQL 从一张表更新到另一张表时条件不起作用?

    我尝试过一种似乎对其他人有效的解决方案 从表 b 更新表 a 其中 条件 我似乎无法让它工作 MySql 给了我一个语法错误 我有两个表 我需要将一个表中的一列更新为另一列的值 其中两个表中的 id 都匹配 UPDATE video dat
  • 找不到控制器方法 - laravel 4

    我在尝试运行任何控制器时收到此消息 Symfony Component HttpKernel Exception NotFoundHttpException 未找到控制器方法 我的路线文件中有此代码 Route controller Hom
  • 重新分配而不释放旧内存

    我想使用 realloc 来增加内存大小 同时保持指针不变 因为调用者使用它 realloc 并不总是这样做 有时它会返回一个不同的指针并释放旧的指针 我想 尝试 重新分配内存 如果不可能 则使用原始指针回退到不同的方法 但重新分配已经破坏
  • CodeIgniter + jQuery(ajax) + HTML5 Pushstate:如何使用真实的 URL 进行干净的导航?

    我目前正在尝试建立一个新网站 没什么特别的 漂亮又小 但我一开始就陷入困境 我的问题是干净的 URL 和页面导航 我想以 正确的方式 去做 我想要什么 我使用 CodeIgniter 来获取干净的 URL 例如 www example co
  • 在ios中重绘视图

    是否可以重绘整个视图 我需要它来完成我的语言设置 问题是语言只有在再次绘制视图后才会改变 就像您退出设置然后再次进入一样 语言也会更改 但是当你保存所有内容时 语言保持不变 那么 在发现语言更改后 我应该如何重新绘制我的视图 或者最好是整个
  • 滑动屏幕的某些部分

    I am trying to design one screen which contain some swipe part I have one screen with mapview listview and some text My
  • 使用 axios 获取本地 JSON 数据时遇到问题

    我正在尝试使用 axios 从本地 json 文件获取数据 在控制台下我什至无法得到回应 所以我想我应该在这里询问一下 js 文件 var loadData function loadData axios url filepath json
  • ASP.Net MVC 模型绑定 - 如何更改日期格式?

    我有这个应用程序 默认日期格式必须是dd MM yyyy 语言为巴西葡萄牙语 我已经将文化和 UI 文化设置为pt BR现在myDate ToShortDateString 返回我想要的日期 我可以毫无困难地展示它们 问题是 当用户在输入字
  • Yii2:如何在非 Restful API 上允许 CORS

    我正在 Yii2 Framework 上使用预构建的 API 不是 Restfull 它使用 JSON 数据进行响应 并根据用户类型和凭证令牌接受请求 现在我必须制作一个位于不同位置 域 的应用程序 这会导致 CORS 冲突 我的应用程序是