跨域总结

一、什么是跨域
浏览器不能跨站点执行脚本。这是由于浏览器的同源策略造成的,同源:协议、域名、端口号均相同的站点才同源,任意一个不同都会产生跨域问题。注意,域仅仅是通过“URL的首部”来识别(“URL的首部”指window.location.protocol +window.location.host,也可以理解为“Domains, protocols and ports must match”。),浏览器不会尝试判断两个域是否在同一个ip上,即就算不同的域名对应的ip一样,也算跨域。例如http://localhost:8080与http://127.0.0.1:8080算跨域。同源限制主要分几种情况:
DOM同源:禁止对不同源的DOM进行操作。主要是针对iframe跨域场景,不同域的iframe父子页是不能操作对方的DOM的。(iframe的src属性时不存在跨域问题)
XMLHttpRequest同源(ajax):禁止使用XMLHttpRequest对象向不同源的服务器地址发起Http请求。
cookie,localstorage,无法读取
注意:跨域限制是浏览器行为,不是服务器行为。<a>、<img>、<script>等标签的src属性都不存在跨域限制

二、为什么浏览器要限制跨域
出于安全考虑

截图自:https://www.jianshu.com/p/a75cff5a67e2

三、如何解决跨域问题

    1. CORS:”跨域资源共享”(Cross-origin resource sharing),这是一个W3C标准。
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于前端开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信
    2. 服务器代理,即将先请求到本站点服务器,由服务器转发到跨域站点,再返回跨域站点返回的数据。(好麻烦额~~~)
    3 JSONP,利用<script>标签的src属性不存在跨域实现,需要前后端同时配合,现已不推荐使用,方案一是标准的跨域方案,为什么不用呢,JSONP方案说到底还是捡漏洞。
其实如果我们只是简单地调用一下跨域的url,不需要交互,不需要url返回数据,那直接动态创建一个没有跨域限制的标签,例如<script src='跨域url'>,即可达到目的。但更多场景是我们需要获取url返回的数据,并操作该数据,这个时候JSONP应用而生(原理没变),后端返回的数据为方法的调用(例如方法名叫test),test(data),前端需要先定义test方法,这里我们定义弹出data的内容,function test(data) {alert(data)},这样就能实现了,最后将创建创建script标签,设置src的过程封装成一个函数,供跨域复用。  
缺点:
    仅支持get方法,由其原理决定(<script>的src走get请求)
    不能解决iframe跨域
    该方案需要前后端约定调用方法名。后端还需要知道前端方法名,是不是太耦合了
    3.iframe跨域支持:可参考https://www.cnblogs.com/boystar/p/6909214.html。document.doamin、window.location.hash、window.name。
    4、h5的postMessage。

四、其他

一个域名只能解析出一个ip,多个域名可以指向一个ip。(DNS域名解析负载均衡虽然可以配置一个域名映射多个ip,但是最终解析得到的还是一个ip)

问题:

将url换了后,再请求,能否解决跨域

参考:
https://www.jianshu.com/p/a75cff5a67e2
https://www.jianshu.com/p/a75cff5a67e2 总结可以看看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值