1、 什么是同源策略
浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
本域指的是?
- 同协议:
如:都是http,https,file,ssh,mailto,tel
反例:http://baidu.com和 https://baidu.com/a.js (协议不同) - 同域名(在//后到第一个/之间):
如:都是http://baidu.com/a 和http://baidu.com/b
反例:http://baidu.com 和 http://bbs.baidu.com (域名不同,域名必须完全相同才可以) - 同端口:如都是80端口
如:http://baidu.com/a/b.js 和 http://baidu.com/index.php
反例:http://baidu.com 和 http://baidu.com:8080/a.js (端口不同,第一个是80)
2、什么是跨域?跨域有几种实现形式
跨域就是突破同源策略的限制,使一个域名的网页可以请求另一个域名的资源。实现方式:
-
降域document.domain
前提条件:操作iframe,这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域同时为两个域设置document.domain= xxx.com -
jsonp :
利用script的src标签的跨域属性,传递一个callback参数给服务端来获取其他源的数据 -
cors 跨域资源共享:
在HTTP请求里添加特殊的头,允许服务器指定特定的域名可以跨域访问。 -
HTML5 postMssage:
html5引入的API,可以实现跨文档、多窗口、跨域消息的传递。
3、 JSONP 的原理是什么
- 利用<script>标签没有跨域限制来达到与第三方通讯的目的。
- 当需要通讯时,本站脚本创建一个<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是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing),避开了浏览器的同源策略,通过在http请求里添加特殊的头,允许服务器指定哪些跨域请求是允许的。
- 与jsonp使用目的相同,但是要比jsonp更强大,缺点是不兼容老的IE浏览器。如:
header("Access-Control-Allow-Origin:http://jiuyi.com")
//指定[http://jiuyi.com](http://jiuyi.com) 这个域可以请求它;
header("Access-Control-Allow-Origin:*")
//指定所有域都可以请求它;
网友评论