1.同域或者同源(同一个协议,同一个端口,同一个域名)
(1)它是由Nets cape提出的一个著名的安全策略:指同一个协议、域名、端口。
(2)跨域:指在不同域里获得对应的数据。
(3)实现跨域:
1)凡是有src属性的都可以是实现跨域,例如:(减少和服务器的交互)
<script> <img> <iframe>
2)实现跨域有三种方式:
1.第一种利用iframe实现
(1)主要利用的是domain方式(很多浏览器已经不支持)
(2)Location.search实现,也可以是iframe。
2.第二种是jsonp(不安全,一般也不用)
3.第三种是利用后台代理(cors)。(例如:实例跨域传值——服务器处理,php文件处理)
window.postMessage——(h5新增)
JSONP(不安全):
1.SONP是一种非官方跨域数据交互协议。
2.JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求,我们可以通过使用html的script标记来进行跨域请求,并在相应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象,这种跨域的通讯方式称为JSONP.
3.JSONP原理:
script标记src属性中的链接可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行调用,这样实现了跨域.(src可以跨域)
(1)首先在客户端注册一个callback,然后把callback的名字传给服务器
(2)此时,服务器先生成json数据。然后以javascript语法的方式,生成一个function,function名字就是传递上来的参数jsonp。
(3)最后将json数据直接以入参的方式,放置到function中,这样就生成了一段js语法的文档,返回给客户端。
<script type="text/javascript">
function jsonpCallback(a) {
console.log(a);
}
</script>
<script type="text/javascript" src="http://www.qhdlink-student.top/test/jsonp2.php?callback=jsonpCallback"></script>
CORS介绍:
1.CORS是一个W3C标准,全称是“跨域资源共享”(Cross origin resource sharing)
2.CORS需要浏览器和服务器同时支持,目前,所有浏览器都支持该功能,IE浏览器不能低于IE10.
3.整个CORS通信过程,都是浏览器自动完成,不需要用户参与,对于开发者来说,CORS通信于同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉.
4.因此,实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就可以跨源通信.