跨域背后的故事(一)----- 同源策略
链接跳转
我们每天玩着手机,看着里面众多的数据资源,从中找寻乐趣的信息,尤其是短视频平台火了之后,众多的知识,链接,资源越来越多,比如微信有人给你发了链接, 一点就获取去 B 站看搞笑视频了,又或许去京东商城看礼物了,但是这资源跳转背后的故事,你或许不太了解,卢卡带你去揭开链接背后的面纱
URL 统一资源定位器
互联网中所有的资源,都是简单的通过 URL,来实现的,他们作为一个地址,带你去找寻资源的所在地,
在 WWW 上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫 URL(Uniform Resource Locator,统一资源定位器),它是 WWW 的统一资源定位标志,就是指网络地址。
URL 的构成:
分为协议、主机、端口、路径四部分组成
微信和 B 站的资源不一样呢?
简单说,通过域名 dns 系统,匹配到的主机,端口号都不一样
微信:https://mp.weixin.qq.com/s/HbzLEt6NOP9Is9F3GOnbUQ
Bilibili:https://www.bilibili.com/video/BV1LA411g7Qt
域名 DNS,是将我们熟知的网站产品的简称作为关键字,代替固定的主机 IP 地址的操作。
举个例子
我要去找学校找小明玩,没有 DNS 的时候,我要去教室找他,因为我和小明是同学,但是如果他们亲戚要找他, 就会去找班主任,班主任的身份就是(DNS)域名解析,然班主任告诉他在,五年级三班,三楼右边第一个教室,才可以找到小明。
言归正传:
正是因为有协议,主机,端口区分去资源,导致资源在内部可以解析共享,但是其他网站可能就不认识了,这时候就会出现一个新的协议;
浏览器,是用来展示服务器回馈给客户端数据展示的工具, 主要就是来识别多个链接 URL,比如我们登录京东商城买东西,但是登录过后,就一直可以使用,这其中有 cookie 起作用,要是有一个恶意网站和京东名称一样,你访问到之后,可能会篡改拿到你之前 cookie 中的信息,到底是不是呢?
答案是不会, 因为浏览器有一个特别重要的安全机制,同源策略:
假设一下,如果没有同源策略, 访问京东之后,买东西转账之后,点开了一个网站 B,如果 B 是一个钓鱼网站,在没有同源策略限制的情况下,他可以通过 js 来访问和修改 jd 中任何数据;(说白了,判断是不是自己人)
同源策略:(SOP)
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能;
同源策略是浏览器的行为,是为了保护本地数据不被 JavaScript 代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收
本质
如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。
https://www.bilibili.com/video 为例
主要体现
不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以 xyz.com 下的 js 脚本采用 ajax 读取 abc.com 里面的文件数据是会被拒绝的。
总结:
同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。
因为浏览器支持同源策略,所以我们访问其他资源,需要跨域操作,可以使用 CORS,jsonP 等,后面一期会更新的,加油哦,
我是卢卡,今天也是元气满满的一天,奥利给。
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/7811c166239e304339523a5eb】。文章转载请联系作者。
评论