• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

PHP服务器端处理跨域问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
PHP的pcntl进程控制之pcntl_wait发布时间:2022-07-10
下一篇:
php上传参数发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap