java web支援jsonp跨域
阿新 • • 發佈:2018-11-20
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 暴露的資訊