java web支持jsonp跨域
2019-11-30

jsonp跨域请求处理

Jsonp(JSON with Padding) 是 json的一种"使用模式",可以让网页从别的域名(网站)那获取资料,绕过同源策略(若地址里面的协议、域名和端口号均相同则属于同源),即跨域读取数据。jsonp:利用script标签可以跨域,让服务器端返回可执行的Javascript函数,参数为要回发的数据。可看做带有回调函数的ajax请求。

js代码

<script type="text/javascript"> $(function(){ /* //简写形式,效果相同 $.getJSON("http://app.example.com/base/json.do?sid=1494&busiId=101&jsonpCallback=?", function(data){ $("#showcontent").text("Result:"+data.result) }); */ $.ajax({ type : "get", async:false, url : "http:/XXX", dataType : "jsonp",//数据类型为jsonp jsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数 jsonpCallback:"自定义回调函数名" success : function(data){ alert(data.info) }, error:function(){ alert("fail"); } }); }); </script>

java后端处理代码

@ResponseBody @RequestMapping(value = "/url", produces= MediaType.APPLICATION_JSON) public String test( HttpServletRequest request, HttpServletResponse response) throws Exception{ String result = getResult(); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "private,no-cache,no-store,max-age=0"); response.setDateHeader("Expires", 0); String str=request.getParameter("jsonpCallback"); if (str==null||str.equals("")) { return result; } else { return str + "(" + result + ")"; } }

CORS(协议跨域资源共享”)(Cross-origin resource sharing)

它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制 详细介绍 戳此

Access-Control-Allow-Origin:* 允许所有域名的脚本访问该资源Access-Control-Allow-Methods:GET,POST,PUT,DELETE,OPTIONS 运行什么方式访问资源Access-Control-Expose-Headers:x-requested-with 暴露的信息