题目1: 什么是同源策略
“同源策略(Same-Origin Policy)”,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源,就是必须协议、域名、端口都一致的,才叫做同源。 如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。
例如:http://www.12306.cn和https://www.12306.cn,由于协议不一致,就不是同源。http://127.0.0.1:8080/test1和http://localhost:8080/test1 也不属于同源,因为域名不一致。端口不同当然也不叫同源了。
https://www.zhihu.com/question/25427931
题目2: 什么是跨域?跨域有几种实现形式
js跨域是指通过js在不同的域之间进行数据传输或通信
跨域有这几种实现形式
- JSONP
- Cors
- 降域
- PostMessage
在题目5博客里会详细介绍
题目3: JSONP 的原理是什么
JSONP主要是利用<script></script>,通过访问src的地址来访问任意域的接口,因为script没有收到同源策略的限制,可以访问任意域的接口。
当HTML中有<script src=''></script>时,服务器返回字符串和"content-type=javascript",浏览器会把字符串当成Javascript来解析。
目标服务器的接口监听到了请求,如果双方约定好了,在url定义一个参数(一般是callback),参数的内容是要调用的方法,服务器检查有没有这个参数,如果有,返回的数据是“方法名(JSON数据)”的形式。由于参数方法是事先定义好的,返回的方法会自动执行。
简而言之:
通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。
题目4: CORS是什么
CORS全称是跨域资源共享。
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。