PHP 设置多域名允许跨域访问

针对 PHP 语言设置多域名允许跨域访问

  1. 服务器变量:

    • 服务器变量存储在 $_SERVER 数组中,在这个数组中有一个特殊的键值:HTTP_ORIGIN。这个键只在跨域的时候才会存在值,同源时为空字符串
  2. 响应头设置允许某域名访问:access-control-allow-origin

    • header 函数可以设置允许某域名跨域访问,形式为 header('access_control_allow_origin:*')
  3. 贴代码:

    $allow_origin = array(
        'a.baidu.com',
        'b.baidu.com',
    );
    //跨域访问的时候才会存在此字段
    $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';  
    if (in_array($origin, $allow_origin)) {
        header('Access-Control-Allow-Origin:' . $origin);
    } else {
        return;
    }

    note:通过接口工具请求接口时 $_SERVER['HTTP_ORIGIN'] 变量也为空字符串。

api

刻意练习,日益精进。

讨论数量: 1

谢谢大佬,让我解决了多域名跨域的问题 :joy:

另外我想补充一小点,这里个数组 $allow_origin 里面的字符串必须和请求头里面的 Origin: 一致,我的请求头里面的是 Origin: http://xxx.xxx.xxx ,数组里面的填的是 xxx.xxx.xxx ,结果报响应头里面没有 Access-Control-Allow-Origin 错误

$allow_origin = array(
    'a.baidu.com',//就是这里
    'b.baidu.com',
);
1周前 评论
菜就多努力呀n (楼主) 1周前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!