在tags.php的开始监听app_init可以监听到,所以可以添加行为监控。
<?php return array ( 'app_init' => array ( ), 'app_begin' => array ( 0 => 'app\\behavior\\controller\\App', ), 'module_init' => array ( ), 'view_filter' => array ( ), 'log_write' => array ( ), 'app_end' => array ( ), ) ?>
然后在行为目录新增一个类:
<?php
/**
* @email wei@alipay168.cn
* @author 小韦
* @link http://blog.alipay168.cn
* @Date: 2020/3/23 20:13
*/
namespace app\behavior\controller;
use think\Response;
class App
{
function run($params)
{
$refer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
//可以跨域的白名单
$domains = ['localhost'];
if (!empty($refer) && in_array(parse_url($refer, PHP_URL_HOST),$domains)) {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS, DELETE'); //支持的http 动作
header('Access-Control-Allow-Headers: *');//设置支持的header
//响应options这种试探类型请求
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
return header("HTTP/1.1 200 OK");
//不行就用下面的(下面的不行就用上面的或者exit('ok'))
return Response::create()->contentType("application/json")->code(200)->send();
}
}
}
}
}如果发现设置无效,一定要检查一下是不是https和http的请求问题,比如后台配置了https而前端用http请求,那么就会一直报错CORS ERROR,前端修改http为https即可。