在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即可。