🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[thinkphp5通过设置请其头允许跨域请求](https://www.phpbloger.com/article/63.html) 在接口开发的过程中,或者协同开发的时候,需要用到AJAX跨域请求(不在同一个域名下的请求:如在站点A下 Ajax 请求B下的接口)。 有2个方法解决 1、通过jsonp。 2、通过设置请求头 这里我们看一下如果不设置请求头发送一个跨站点的Ajax请求代码如下 ![](https://box.kancloud.cn/43ebe17417d9387795f35dea870e7565_697x357.png) 请求结果返回500错误并且提示:Access-Control-Allow-Origin' header is present on the requested resourceg ![](https://box.kancloud.cn/e12980d951bb91ae86cf775249fa4b8a_1241x51.png) 根据错误信息从字面上就能很好的理解,意思是说在请求的资源上没有被允许的头,因此该域名没有权限访问。因此我们设置请求头允许跨域请求。 这里主要说一下Thinkphp下的代码,我们使用钩子在请求开始的时候设置请求头即可。 1、新建 application/behavior/header.php ``` <?php /** * User: jung * Date: 2018/6/25 * Time: 10:54 */ namespace app\behavior; use think\Response; class Header{ /** * @param $dispatch * 设置跨域请求【暂时设置为全部都可以请求】 */ 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; } } } ``` 2、钩子行为绑定 applicatin/tags.php ``` return [ // 应用初始化 'app_init' => [], // 应用开始 'app_begin' => [ 'app\\behavior\\Header', ], // 模块初始化 'module_init' => [], // 操作开始执行 'action_begin' => [], // 视图内容过滤 'view_filter' => [], // 日志写入 'log_write' => [], // 应用结束 'app_end' => [ 'app\\behavior\\Header', ], ]; ``` 注意: ``` app\\behavior\\Header ``` 是 Header 类的命名空间,写错将不会被调用。 本文连接:http://www.phpbloger.com/article/63.html 文章都为原创,转载请注明出处!