跨域问题是前端开发经常遇到的了,大家可能常用的就是JSONP了,


JSONP非常方便,只要前后端约定好一个方法名,就可以沟通了,但JSONP也有一定的局限,JSONP只支持GET请求,还有当你想提供一个公开服务,可以让所有外部开发者都可以调用,用JSONP就有点麻烦了


例如调用百度的API服务


var api = 'http://apis.baidu.com/heweather/weather/free?city=beijing';

$.get(api,function (data){

alert(data);

});


可以发现直接调用就可以正常返回,没做任何处理,也没有使用JSONP


这个如何实现?


非常简单,使用CORS(跨域资源共享)方式即可


实现的方式也很简单,在服务端添加一个‘Access-Control-Allow-Origin’响应头信息就可以了


可以允许所有跨域调用,例如 


Access-Control-Allow-Origin: *


也可以只允许某个域名的调用,例如


Access-Control-Allow-Origin: http://www.a.com


例如php中的设置:


header('Access-Control-Allow-Origin: *');

 

注意

 

CORS是个新东西,大部分浏览器已经支持,据说IE8也已经支持,如果对浏览器兼容性及其在意的话,建议慎用,严格测试一下