关键词搜索

源码搜索 ×
×

PHP 服务器端处理跨域问题

发布2020-04-13浏览437次

详情内容

1、允许所有域名访问
header(‘Access-Control-Allow-Origin: *’);
2、允许单个域名访问
header(‘Access-Control-Allow-Origin: https://test.com’);
3、允许多个域名访问
在实际项目中最好指定能跨域访问的域名,增加安全性。可以写在一个公共类里面,封装一个方法调用。

// 设置能访问的域名
static public $originarr = [
‘https://test1.com’,
‘https://test2.com’,
];

/**
 *  公共方法调用
 */
static public function setheader()
{
   // 获取当前跨域域名
   $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
   if (in_array($origin, self::$originarr)) {
      // 允许 $originarr 数组内的 域名跨域访问
      header('Access-Control-Allow-Origin:' . $origin);
      // 响应类型
      header('Access-Control-Allow-Methods:POST,GET');
      // 带 cookie 的跨域访问
      header('Access-Control-Allow-Credentials: true');
      // 响应头设置
      header('Access-Control-Allow-Headers:x-requested-with,Content-Type,X-CSRF-Token');
   }
}

    起初只在文件开头设置了

    header(‘Access-Control-Allow-Origin:*’);
    然后报错

    Request header field X-Requested-With is not allowed by Access-Control-Allow-Headers in preflight response.
    解决方法:

    文件开头设置

    header('Access-Control-Allow-Origin:*');
    header('Access-Control-Allow-Methods:OPTIONS, GET, POST'); // 允许option,get,post请求
    header('Access-Control-Allow-Headers:x-requested-with'); // 允许x-requested-with请求头
    
    • 1
    • 2
    • 3

    后成功

    其中比较疑惑的是 Access-Control-Allow-Headers 的设置。 看了 这篇文档 后理解了

    如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的。它也是一个逗号分隔的字符串,表明服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段。

    然后看了请求头中确实 包括Access-Control-Request-Headers

    然后成功返回接口信息

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载