题目1: 什么是同源策略
浏览器出于安全方面考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
如:
-
http://jirengu.com/a/b/js
和http://jirengu.com/index.php
(同源)
不同源的例子:
-
http://jirengu.com/main.js
和https://jirengu.com/a.php
(协议不同) -
http://jirengu.com/main.js
和http://bbs.jirengu.com/a.php
(域名不同,域名必须完全相同) -
http://jirengu.com/main.js
和http://jirengu.com:8080/a.php
(端口不同,第一个是80)
对于当前页面来说,页面存放的JS文件的域不重要,重要的是加载该JS的页面在什么域。
题目2: 什么是跨域?跨域有几种实现形式
简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。更详细的说明看下表:
url 说明 是否允许通信 http://www.a.com/a.js
和http://www.a.com/b.js
同一域名下 允许 http://www.a.com/lab/a.js
和http://www.a.com/script/b.js
同一域名下不同文件夹 允许 http://www.a.com:8000/a.js
和http://www.a.com/b.js
同一域名,不同端口 不允许 http://www.a.com/a.js
和https://www.a.com/b.js
同一域名,不同协议 不允许 http://www.a.com/a.js
和http://70.32.92.74/b.js
域名和域名对应ip 不允许 http://www.a.com/a.js
和http://script.a.com/b.js
主域相同,子域不同 不允许 http://www.a.com/a.js
和http://a.com/b.js
同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问) http://www.cnblogs.com/a.js
和http://www.a.com/b.js
不同域名 不允许
跨域的实现方式有以下几种:
- JSONP
- CORS
- 降域
- postMessage
题目3: JSONP 的原理是什么
当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如: <script src="http://www.example.net/api?param1=1¶m2=2"></script> 并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。 第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如: callback({"name":"hax","gender":"Male"}) 这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。
题目4: CORS是什么
CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。 当使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin; 浏览器判断该相应头中是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。
题目5: 根据视频里的讲解演示三种以上跨域的解决方式
JSONP CROS 降域当这两个域名都属于同一个基础域名并且所用的协议、端口都一致的时候,可以使用降域来实现跨域
例:
//页面A的URL: http://a.jirengu.com/a.html
window.domain = jirengu.com
//页面B的URL: http://b.jirengu.com/a.html
window.domain = jirengu.com
postMessage
网友评论