1. 什么是同源策略
同源策略,它是由Netscape提出的一个著名的安全策略。
现在所有支持JavaScript 的浏览器都会使用这个策略。
所谓同源是指,域名,协议,端口相同。
当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面
当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,
即检查是否同源,只有和百度同源的脚本才会被执行。
如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。
2.什么是跨域?跨域有几种实现形式
跨域是指因同源策略的限制,所以诞生了跨域,指
http://a.jrg.com
可以向http://b.jrg.com
请求数据。跨域4种实现方式:
通过
postMessage(data,origin)
这个H5的新API实现跨域,当通过某些动作或者事件出发后,就会利用window.frames[0].postMessage()
发送数据过去<iframe>
标签所嵌套的窗口,对方js代码中如果有监听,则可以进行跨域
浏览器发现这次跨源AJAX请求是简单请求,就自动在头信息之中,添加一个Origin字段。Origin字段用来说明,本次请求来自哪个源(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求。如果对方添加了
Access-Control-Allow-Origin: *
,服务器会返回响应,浏览器请求数据需要注意的是,如果要发送
Cookie,Access-Control-Allow-Origin
就不能设为星号,必须指定明确的、与请求网页一致的域名。
降域是指降低域名来进行跨域,如:
降低域名就可以访问,这种方法有限制,就是主域要相同
http://a.jrg.com
和http://b.jrg.com
两个页面通过
document.domain = "jrg,com"
通过
<script></script>
实现,因为这种方法引用非同源数据时,浏览器不阻止实现方法是在URL参数中添加双方谈好的参数,当对方接收到URL中有该参数,便将拼装好的data返回,这时我们JS代码中也有这样的函数,就会执行
jsonp
降域
cors
postMessage
3.JSONP 的原理是什么
通过
<script></script>
实现,因为这种方法引用非同源数据时,浏览器不阻止实现方法是在URL参数中添加双方谈好的参数,当对方接收到URL中有该参数,便将拼装好的data返回,这时我们JS代码中也有这样的函数,就会执行,如:
1.png
2.png
4.CORS是什么
浏览器发现这次跨源AJAX请求是简单请求,就自动在头信息之中,添加一个Origin字段。Origin字段用来说明,本次请求来自哪个源(协议 + 域名 + 端口)。服务器根据这个值,决定是否同意这次请求。如果对方添加了
Access-Control-Allow-Origin: *
,服务器会返回响应,浏览器请求数据需要注意的是,如果要发送
Cookie
,Access-Control-Allow-Origin
就不能设为星号,必须指定明确的、与请求网页一致的域名。
1.png
2.png
5.根据视频里的讲解演示三种以上跨域的解决方式
Jsonp & Cors
1.png
2.png
postMessage
1.png
2.png
降域
1.png
2.png
** 跨域处理方式代码 **
作者:饥人谷_米弥轮
链接:https://www.jianshu.com/p/f6b70ce44e7b