专栏首页coding同源政策与跨域请求

同源政策与跨域请求

同源政策

1995年,同源政策由 Netscape(网景) 公司引入浏览器。目前,所有浏览器都实行这个政策。

最初,它的含义是指,A 网页设置的 Cookie,B 网页不能打开,除非这两个网页同源。所谓同源指的是三个相同。

  • 协议相同(http https)
  • 域名相同
  • 端口相同(默认80端口)

随着互联网的发展,同源政策越来越严格,目前非同源的站点发出请求会受到以下限制

  • Cookie无法读取。
  • DOM 无法获得。
  • JAX 请求无效(可以发送,但浏览器会拒绝接受响应)

跨域请求

违反了同源政策,就属于跨域请求

新建 index.html

<script>
    var xhr = new XMLHttpRequest();
    xhr.open('get', 'http://local.b.com');
    res = xhr.send();
</script>

服务端的响应 index.php

echo "汝何人?敢入我室";

这种情况下,请求依然是有发出到服务端的,可以从网络请求中看到,但客户端无法获取相应的数据

用代理的方式

$host = 'local.b.com';
$url = 'http://local.b.com/index.php';
$ip = '127.0.0.1';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, str_replace($host, $ip, $url));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: {$host}"));
curl_setopt($ch,CURLOPT_TIMEOUT,5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);
echo $html;

此时,控制台就不会有报错信息了

这种方式肯定是不可持续的,多了个中间商的环节,平添了许多成本

最好的方式当然是直接对话,此时就需要让客户端携带一个标识,服务端检测到标识后放行

cors

header('Access-Control-Allow-Origin:*');
echo "谁都可以进来";

开放给所有人

这样显然不安全,可以指定某个网站

$allow = [
    'http://local.a.com',
    'http://local.c.com',
];

// 获取来访域名
$domain = $_SERVER['HTTP_ORIGIN'];
if (in_array($domain, $allow)) {
    header('Access-Control-Allow-Origin:' . $domain);
} 
echo "你被翻牌了,今晚就留下吧...";
 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 程序员应该懂的github礼仪事件概况为什么这事这么招人恨背后的反思

    章鱼喵
  • 程序员应该懂的github礼仪

    近日,Node 之父 Ryan Dahl 发布新的开源项目 deno, 这个项目在前几天引发了很大的关注,但关注点却不是这个项目的技术有多牛,而是有一群中国程序...

    章鱼喵
  • nginx教程之初窥门径

    牛人与普通人的区别在于:前者遇到不爽的事,二话不说,自己动手解决;普通人要么骂骂咧咧,要么置于不理,眼不见为净。当然,这并没有什么不好,这个世界就是需要普通人占...

    章鱼喵
  • 微信小程序开发-注册账号

    微博登录原理,简单介绍一下,通过特定网址携带固定参数,发起请求登录,之后通过回调地址,获取code值,通过code值获取access_token值和uid值,通...

    申霖
  • TP3.2接入极光IM

    一:在common/common文件下function文件中写一个公共调用的方法。

    php007
  • 腾讯云图床api php

    flyxber
  • php curl获取网页内容乱码和获取不到内容的解决方法

    1.如果用curl请求网页,多方网页使用了gzip压缩,那么获取的内容将有可能为乱码。 解决方法 $url = 'http://www.du52.com'; $...

    joshua317
  • AkShare-疫情数据-CSSE数据

    本次在 COVID-19 原有接口的基础上增加:美国约翰·霍普金斯大学系统科学与工程中心(JHU CSSE)收集各国卫生机构公开 2019-2020 年新型冠状...

    AkShare
  • [virt][clock]steal time技术分析

    前言: 在《clocksource的管理和虚拟化》中,大概分析了kvm clock,tsc,hpet等clock source。其中尤其是kvm clock计算...

    皮振伟
  • 《机器学习》笔记-半监督学习(13)

    如今机器学习和深度学习如此火热,相信很多像我一样的普通程序猿或者还在大学校园中的同学,一定也想参与其中。不管是出于好奇,还是自身充电,跟上潮流,我觉得都值得试一...

    机器学习算法工程师

扫码关注云+社区

领取腾讯云代金券