ThinkPHP 5 AJAX跨域请求头设置实现过程解析


Posted in PHP onOctober 28, 2020

最近用thinkphp做项目,在测试环境时,存在接口的测试问题。在tp官网也没能找到相关的解决方法。自已看了一下源码,有如下的解决方案。

在项目目录下面,创建common/behavior/CronRun.php文件,文件内容如下:

<?php
/**
 * Created by PhpStorm.
 * User: LiuYang
 * Date: 2017/3/9
 * Time: 19:37
 */

namespace app\common\behavior;

use think\Exception;
use think\Response;

class CronRun
{
  public function run(&$dispatch){
    $host_name = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : "*";
    $headers = [
      "Access-Control-Allow-Origin" => $host_name,
      "Access-Control-Allow-Credentials" => 'true',
      "Access-Control-Allow-Headers" => "x-token,x-uid,x-token-check,x-requested-with,content-type,Host"
    ];
    if($dispatch instanceof Response) {
      $dispatch->header($headers);
    } else if($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
      $dispatch['type'] = 'response';
      $response = new Response('', 200, $headers);
      $dispatch['response'] = $response;
    }
  }
}

接着在项目中(tags.php)配置行为动作,如下:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用行为扩展定义文件
return [
  // 应用初始化
  'app_init'   => [],
  // 应用开始
  'app_begin'  => [
    'app\\common\\behavior\\CronRun'
  ],
  // 模块初始化
  'module_init' => [],
  // 操作开始执行
  'action_begin' => [],
  // 视图内容过滤
  'view_filter' => [],
  // 日志写入
  'log_write'  => [],
  // 应用结束
  'app_end'   => [
    'app\\common\\behavior\\CronRun'
  ],
];

ok,以上几步就解决跨域请求问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
来自PHP.NET的入门教程
Oct 09 PHP
PHP及Zend Engine的线程安全模型分析
Nov 10 PHP
PHP输出XML到页面的3种方法详解
Jun 06 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
php文件上传、下载和删除示例
Aug 28 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 PHP
php在linux环境中如何使用redis详解
Dec 15 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 #PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 #PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 #PHP
Laravel配合jwt使用的方法实例
Oct 25 #PHP
数据结构之利用PHP实现二分搜索树
Oct 25 #PHP
如何运行/调试你的PHP代码
Oct 23 #PHP
php redis setnx分布式锁简单原理解析
Oct 23 #PHP
You might like
mysql5写入和读出乱码解决
2006/11/25 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
Python计算一个文件里字数的方法
2015/06/15 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
对python产生随机的二维数组实例详解
2018/12/13 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
python制作填词游戏步骤详解
2019/05/05 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
Python Flask上下文管理机制实例解析
2020/03/16 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
pytorch实现查看当前学习率
2020/06/24 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
database面试题
2013/03/28 面试题
员工年终演讲稿
2014/01/03 职场文书
中学教师培训制度
2014/01/31 职场文书
社区交通安全实施方案
2014/03/22 职场文书
产品推广策划方案
2014/05/10 职场文书
分公司任命书
2014/06/06 职场文书
先进集体申报材料
2014/12/25 职场文书
2015年新农合工作总结
2015/03/30 职场文书
关于感恩的作文
2019/08/26 职场文书