什么是同源策略
同源策略是一种约定,它是浏览器最核心的安全功能,如果缺少了同源策略,那么浏览器正常的功能可能会收到影响,还会影响安全性,可以说web是构建在同源策略的基础上的,浏览器只是针对同源策略的一种实现。它是一种安全策略
现在所有支持JavaScript的浏览器都会使用这个策略
所谓的同源指的是,同域名,协议,端口,当一个浏览器的两个tab页中分别打开来自百度和谷歌的页面,当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,就是看是否同源,只有百度的同源脚本才会被执行,如果非同源,那么在请求数据时,浏览器会在控制台中报错。
什么是跨域,跨域有几种实现方式
跨域允许不同源的借口实行交互
- JSONP
- cors
- 降域名(有限制,要求域名有同样的后缀)
- postMessage
jsonp的原理是什么
json(json with padding)填充式json ,jsonp主要由回调函数和数据(传入回调函数的json数据)组成应为浏览器允许垮与资源嵌入,所以jsonp是通过在页面动态的添加<script>,为标签内部添加一个跨域的URL其中包括在之前声明好的一个回调函数(?XXX=回调函数名)当jsonp响应加载完以后,则会立即执行
- 缺点
不能确保从其他域中加载的代码是否有恶意代码
确定jsonp请求是否失败并不容易(HTM5L中为script元素添加的onerror时间处理程序并没有得到浏览器的支持)
cors是什么
CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。 实现方式很简单,当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin; 浏览器判断该相应头中是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。