zoukankan      html  css  js  c++  java
  • ThinkPHP 5 中AJAX跨域请求头设置方法【转】

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

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

    <?php
    /**
     * Created by PhpStorm.
     * User: LiuYang
     * Date: 2017/3/9
     * Time: 19:37
     */
    
    namespace appcommonehavior;
    
    use thinkException;
    use thinkResponse;
    
    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,以上几步就解决跨域请求问题。

    原文链接:https://www.cnblogs.com/ghjbk/p/7715680.html

  • 相关阅读:
    Mac连接远程Linux管理文件(samba)
    centos6 防火墙iptables操作整理
    安装postgresql
    linux CentOS6.5 yum安装mysql 5.6
    centos--git搭建之Gogs安装
    查看mysql 默认端口号和修改端口号
    centos之mysql安装配置使用
    流媒体服务器SRS部署
    redis配置文件参数说明
    redis 安装
  • 原文地址:https://www.cnblogs.com/KillBugMe/p/12402785.html
Copyright © 2011-2022 走看看