zoukankan      html  css  js  c++  java
  • PHP 服务器端处理跨域问题

    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请求头
    

    后成功

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

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

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

    然后成功返回接口信息

    参考 文档: http://www.ruanyifeng.com/blog/2016/04/cors.html


    Hi, Eric
  • 相关阅读:
    mysql 聚集函数 count 使用详解
    在Docker中使用kettle遇到的问题解决
    整取零存_字段级迁移工具
    快速修改MySQL字段类型
    数据仓库知识点梳理(4)
    五一节分享60多本免费AI电子书
    数据仓库知识点梳理(3)
    数据仓库知识点梳理(2)
    数据仓库知识点梳理(1)
    解决MacVim在macOS Catalina下字母显示不全的问题
  • 原文地址:https://www.cnblogs.com/hi-eric/p/11598439.html
Copyright © 2011-2022 走看看