题目1: 什么是同源策略
浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
题目2: 什么是跨域?跨域有几种实现形式
跨域指A网页请求B网页的资源,只要A网页和B网页的协议、端口、域名其中任何一个不同,都算跨域。
url | 说明 | 是否允许通信 |
---|---|---|
http://www.a.com/a.js http://www.a.com/b.js |
相同协议,同一域名 | 允许 |
https://www.a.com/a.js http://www.a.com/a.js |
不同协议,同一域名 | 不允许 |
http://www.a.com/a.js http://www.b.com/a.js |
相同协议,不同域名 | 不允许 |
http://js.a.com/a.js http://www.b.com/a.js |
相同协议,不同域名 | 不允许 |
http://www.a.com:8080/a.js http://www.a.com/b.js |
主域相同,子域不同 | 不允许 |
http://www.a.com/a.js http://70.23.92.75/a.js |
域名和域名对应ip | 不允许 |
跨域主要实现方式:
JSONP、CORS、降域、PostMessage
题目3: JSONP 的原理是什么
html中的script
标签可以引入其他域下的js,利用这个特性可以实现跨域访问接口,需要后端支持
1 定义数据处理函数_fun
2 创建script
标签,src的地址执行后端接口,最后个参数加上callback=_fun
3 服务器端在收到请求后,解析参数,计算返回数据,输出 _fun(data)字符串
4 fun(data)会放到script标签作为js执行,此时调用fun函数,将data作为参数
题目4: CORS是什么
CORS全称是跨域资源共享(Cross-origin resource sharing),是一种ajax跨域请求资源的方式,支持现代浏览器,IE支持10以上,实现方式很简单,当你使用XMLHttpRequest发送请求时,浏览器发现该请求 不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加一个响应头:Access-Control-Allow-Origin;浏览器判断该相应头中是否包含Origin的值,如果有,浏览器就会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这是我们无法拿到响应数据,所以CORS的表象是让你觉得它与同源的ajax请求没区别,代码完全一样。