使用jsonp和cros解决跨域问题

跨域问题

跨域问题会出现于前端访问不同系统的地址适合会产生的问题,目前有个项目的前端和后端分离成两个项目的,导致前端在访问后端的时候就会产生跨域问题。解决方法时使用get的jsonp返回数据即可。还有使用Falsh或者代理服务器中转等方法。其实POST方法还有个CORS可以实现ajax跨域post请求,只是它支持IE8+版本,低版本不支持,但我认为未来是属于它的。

jsonp解决方案

前端:
$.ajax({
url : url,
type : "get",
data : datas,
callback: 'callback',
dataType:'jsonp'}

后端:
public static String ObjectToJsonp(Object object,String callBack)
{
String jsonp = JSONObject.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);
jsonp = callBack + "(" + jsonp + ")";
return jsonp;
}

这样就可以完成get方式的跨域解决。

cros解决方案

前端(绝对地址):

var xhr = new XMLHttpRequest();  
xhr.open("GET", "http://blog.csdn.net/hfahe", true);  
xhr.send();  

后端:

服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。

HTTP 头的设置方法有很多,http://enable-cors.org/这篇文章里对各种服务器和语言的设置都有详细的介绍,下面我们主要介绍Apache和PHP里的设置方法。

Apache:Apache需要使用mod_headers模块来激活HTTP头的设置,它默认是激活的。你只需要在Apache配置文件的<Directory>, <Location>, <Files>或<VirtualHost>的配置里加入以下内容即可:

Header set Access-Control-Allow-Origin *  

缺陷:支持现代浏览器,对于老旧的浏览器版本不支持。

  • 既然不能成为屠龙的勇士,那么就好好成为一名优秀的管家,为公主建设一个温馨美好的家。
    Since it can not become a dragon warrior, then it is a good housekeeper, for the princess to build a warm and beautiful home.

  • 原文地址:https://www.cnblogs.com/ITflying/p/7305028.html