浅谈跨域

1.跨域的由来

浏览器为了保证网站安全,如限制a网站的cookie不被b网站读取,故浏览器禁止非同源情况下进行ajax请求,cookie访问,dom操作。非同源是指URL中协议,域名和端口有一项以上不同。然而,在某些特殊的业务场景下,我们需要获取非同源的数据,故诞生了跨域。

2.CORS(Cross-Origin Resource Sharing,跨域资源共享)

CORS是W3C规定的标准跨域方式,其基本思想是使用自定义的http头部让浏览器与服务器进行沟通,从而决定请求或响应是否成功。

与xhr的区别:

1>.cookie不会随请求发送,也不会随响应返回

2>.只能设置http请求头里面的content-type

3>.不能访问响应头信息

浏览器的兼容:

IE8-IE10是xdr(XDomainRequest),其它使用XMLHttpRequest

兼容写法:

function createCorsRequest(method,url){

var xhr = new XMLHttpRequest();

if(“withCredentials” in xhr){

xhr.open(method,url,true);

}else if(typeof XDomainRequest != “undefined”){

xhr= new XDomainRequest();

xhr.open(method,url);

}else{

xhr = null;

}

return xhr;

}

整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

3.其它跨域

1.jsonp

JSONP是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小。

它的基本思想是,网页通过添加一个

你可能感兴趣的:(浅谈跨域)