同源策略

hello,小伙伴们,又到了《Shealtiel奇遇记》时间了,是不是很期待呢~好了,咱们闲言少叙,奇遇继续~


同源策略几乎是前端面试中几乎必然问到的问题。但是很多同学对同源策略的理解不够深入,今天我们就来聊聊同源策略的问题。



首先按照老规矩,我们先来提出几个问题:

1. 什么是同源?

2. 为什么要有同源策略?


一句话解释同源就是:相同协议,相同域名,相同端口称为同源。


下面我们还是用邓哥抄作业的故事来讲述什么是同源策略。


话说邓哥大学时候号称比较“浪漫~”,因为很“浪”,也很“慢”。。。邓哥每天都写不完作业,只能每天到学校去抄同学的。如果说学霸在知识的海洋里开快艇,那么邓哥只能在知识的海洋里喂鲨鱼。。


有一天邓哥早上匆匆忙忙进到教室,向绿茶妹妹(欧阳绿茶)借了数学作业来抄。


这时邓哥就相当于是浏览器,一个url我们可以分为几个部分,比如http://pan.baidu.com:80。绿茶妹妹就像是一个服务程序,绿茶妹妹姓欧阳, 欧阳是姓,就相当于url中的主域(baidu.com), 绿茶是名,就像是上面url中的子域(pan),一个主机可以有很多端口,就相当于是很多科目的作业,数学作业英语作业之类的,由于一般的服务都占用的是默认的80端口,所以我们一般情况下是看不到端口号的。


绿茶妹妹还有个亲妹妹,叫红茶妹妹(欧阳红茶)~


红茶妹妹和绿茶妹妹是一家的~所以肯定都姓欧阳,只是名字不同,就像是pan.baidu.com(百度网盘)和zhidao.baidu.com(百度知道)的关系。


这天红茶妹妹也没写完作业,也想抄绿茶妹妹的作业,因为作业在邓哥这里,所以来向邓哥来借绿茶妹妹的作业。但是邓哥不敢把作业借给别人,所以邓哥没有借给红茶妹妹。


虽然红茶妹妹和绿茶妹妹都姓欧阳,但是毕竟不是同一个人,这就像是pan.baidu.com和zhidao.baidu.com虽然都是百度旗下的,但是浏览器并不会直接允许zhidao.baidu.com访问pan.baidu.com的内容。这就说明 子域不同不算同源


但是毕竟是一家的,其实红茶妹妹劝说邓哥一阵也是可以借到作业的~


虽然浏览器认为pan.baidu.com和zhidao.baidu.com不是同域,但是毕竟都是一家的,所以在浏览器端进行一些设置之后,还是可以访问到的。这是跨域的一种方式,我们下一篇文章来详细介绍跨域的多种方式。


由于数学老师查作业查的严,英语老师查作业查的松。所以绿茶妹妹提前和邓哥说了,英语作业可以借给别人,但是数学作业绝对不可以。


虽然不同的作业(端口)都是 同一个域 的,但是 同源策略不一定相同。所以就会出现,不同端口不算同源的现象。可能80端口不允许别人访问,但是90端口就有可能允许任何人访问。这个谁能访问,可以是由服务端(绿茶妹妹)设置的,这也是跨域的一种方式,我们后续详细的来讲。


绿茶妹妹比较心细,虽然英语作业可以随便借给别人,但是绿茶妹妹怕借给其他男生会把作业本弄坏,所以绿茶妹妹跟邓哥说,英语作业只能借给女生,不能借给男生~


这时候,https协议就好比是女生,http协议好比是男生,协议不相同不能访问,所以 协议不同也不算同源


所以总的来说,协议,子域,主域,端口任意一个不同,都不算同源,但并不意味着不算同源就完全不能访问,这就是跨域的知识,我们下篇文章再来为大家详细介绍跨域的多种方式。

小伙伴们,你们还想看什么类型、题材的文章?或者在学习前端过程中有哪些痛点呢?欢迎在图文下方给小渡留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同源策略是一种浏览器安全机制,用于限制一个源(域名、协议和端口)的文档或脚本如何与另一个源的资源进行交互。同源策略的目的是防止恶意网站通过脚本访问用户的敏感信息或执行恶意操作。 在同源策略下,一个源的文档或脚本只能与同一源的资源进行交互,不能直接访问其他源的资源。这意味着,如果一个页面中包含一个来自不同源的iframe元素,那么该iframe中的文档或脚本将无法直接访问父页面的DOM,也无法通过常规的方式与父页面进行通信。 然而,同源策略并不是绝对的,有一些方法可以绕过同源策略实现跨域访问,其中包括以下几种常见的方法: 1. JSONP跨域:通过动态创建`<script>`标签,将跨域请求的数据作为回调函数的参数返回到页面中。 2. document.domain + iframe跨域:当两个页面的域名相同但是子域不同,可以通过设置`document.domain`属性来实现跨域访问。 3. location.hash + iframe跨域:通过改变iframe的URL的hash值来传递数据,从而实现跨域通信。 4. window.name + iframe跨域:通过在iframe的`window.name`属性中存储数据,实现跨域通信。 5. postMessage跨域:通过使用`window.postMessage()`方法在不同窗口之间传递消息,实现跨域通信。 6. 跨域资源共享(CORS):在服务器端设置响应头,允许指定的源进行跨域访问。 7. nginx代理跨域:通过配置nginx服务器代理请求,实现跨域访问。 8. nodejs中间件代理跨域:通过使用nodejs中间件代理请求,实现跨域访问。 9. WebSocket协议跨域:通过WebSocket协议进行跨域通信。 总结起来,同源策略是浏览器的一种安全机制,限制了不同源之间的交互。但是通过一些特定的方法,可以实现跨域访问和通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值