PHP 服务器端处理跨域问题

一、容许全部域名访问

header('Access-Control-Allow-Origin: *');

二、容许单个域名访问

header('Access-Control-Allow-Origin: https://test.com');

三、容许多个域名访问

在实际项目中最好指定能跨域访问的域名,增长安全性。能够写在一个公共类里面,封装一个方法调用。
// 设置能访问的域名
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');
   }
}

起初只在文件开头设置了php

header('Access-Control-Allow-Origin:*');

而后报错html

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-Headerscookie

而后成功返回接口信息cors

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

相关文章
相关标签/搜索