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 相关文章推荐
用文本文件制作留言板提示(下)
Oct 09 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
PHP垃圾回收机制引用计数器概念分析
Jun 24 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
php中的boolean(布尔)类型详解
Oct 28 PHP
php操作mysql数据库的基本类代码
Feb 25 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
Mar 25 PHP
10个php函数实用却不常见
Oct 13 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
PHP大文件切割上传并带进度条功能示例
Jul 01 PHP
再谈Yii Framework框架中的事件event原理与应用
Apr 07 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
中国收音机工业发展史
2021/03/02 无线电
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
JS图像无缝滚动脚本非常好用
2014/02/10 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
JS对象深度克隆实例分析
2017/03/16 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
Vue header组件开发详解
2018/01/26 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
Python中有趣在__call__函数
2015/06/21 Python
python计算一个序列的平均值的方法
2015/07/11 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
python定时任务 sched模块用法实例
2019/11/04 Python
python线程里哪种模块比较适合
2020/08/02 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
生产车间主管岗位职责
2013/12/28 职场文书
《在家里》教后反思
2014/03/01 职场文书
城管大队整治方案
2014/05/06 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
机关作风建设整改方案
2014/10/27 职场文书
中层干部考核评语
2015/01/04 职场文书
售后服务承诺函格式
2015/01/21 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
贷款工资证明范本
2015/06/12 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫