Open
Description
1.什么是同源策略(same-origin policy)
概述
浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
本域指的是?
- 同协议:如都是http或者https
- 同域名:如都是aibin.com/a 和aibin.com/b
- 同端口:如都是80端口
需要注意的是: 对于当前页面来说页面存放的 JS 文件的域不重要,重要的是加载该 JS 页面所在什么域
目的
为了保证用户信息的安全,防止恶意的网站窃取数据
限制范围
- Cookie、LocalStorage 和 IndexDB 无法读取。
- DOM 无法获得。
- AJAX 请求不能发送。
2.什么是跨域?跨域有几种实现形式
跨域含义
允许不同域的接口进行交互
实现方式:
- JSONP
- CORS
- 降域
- postMessage
3.JSONP 的原理是什么
JSONP含义
首先jsonp不是json数据,JSON是一种数据格式,而JSONP是一种数据调用方式,是解决JSON跨域获取的解决方案。因此JSONP(JSON with Padding)其实是一个非官方的协议。
JSONP原理
网页通过添加一个<script>元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在一个指定名字的回调函数里传回来。
JSONP实现
- 定义数据处理函数_fun
- 创建script标签,src的地址执行后端接口,最后加个参数callback=_fun
- 服务端在收到请求后,解析参数,计算返还数据,输出 fun(data) 字符串。
- fun(data)会放到script标签做为js执行。此时会调用fun函数,将data做为参数。
4.CORS是什么
CORS含义
CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。
CORS实现
- 当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理
- 如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin;
- 浏览器判断该相应头中是否包含 Origin 的值
- 如果有则浏览器会处理响应,我们就可以拿到响应数据,
- 如果不包含浏览器直接驳回,这时我们无法拿到响应数据。
所以 CORS 的表象是让你觉得它与同源的 ajax 请求没啥区别,代码完全一样。
Activity