1. 什么是同源策略
浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
本域指的是:
- 同协议:如都是http,https,file,ssh,mailto,tel
- 同域名(在//后到第一个/之间):
如都是http://jirengu.com/a 和http://jirengu.com/b - 同端口:如都是80端口
如: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://jiengu.com/main.js 和 http://jirengu.com:8080/a.php (端口不同,第一个是80)
2. 什么是跨域?跨域有几种实现形式
跨域:
允许不同域的接口进行交互
跨域的几种实现形式:
- JSONP
- CORS
- 降域
- postMessage
3. JSONP 的原理是什么
web服务器调用js文件不受是否跨域的影响(而且,带有src属性都可以跨域,如:img iframe script)
JSONP就是依据这个特性,与web服务器调用脚本的方式一样,来引入生成动态的js文件,也就是引入在src里面输入你要的后端文件。
JSONP需要向后台传入一个callback参数,然后服务器返回的数据时callback函数会将数据包裹。
4. CORS是什么
前端用 XMLHttpRequest 跨域访问时,浏览器会在请求头中添加:origin
后端会添加一个响应头:Access-Control-Allow-Origin
浏览器判断该相应头中Access-Control-Allow-Origin的值是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。