1骏掀、jsonp
利用
<script src="" >
來解決跨域
假設(shè)當(dāng)前域?yàn)閘ocalhost:8080,現(xiàn)想訪問localhost:9090來獲取數(shù)據(jù)則可以
$('head').append("<script src='http://localhost:9090/user/getUserData?userId="123"' callback=showUserData>")
//后臺(tái)代碼
response.setAttribute("callback","xxxxxxxxxx")
2 postMessage
通過
otherWindow.postMessage(message, targetOrigin, [transfer])
otherWindow
其他窗口的一個(gè)引用
message
將要發(fā)送到其他 window的數(shù)據(jù)
targetOrigin
通過窗口的origin屬性來指定哪些窗口能接收到消息事件痹升,其值可以是字符串"*"(表示無限制)或者一個(gè)URI夺巩。在發(fā)送消息的時(shí)候障癌,如果目標(biāo)窗口的協(xié)議、主機(jī)地址或端口這三者的任意一項(xiàng)不匹配targetOrigin提供的值诉位,那么消息就不會(huì)被發(fā)送
transfer 可選
是一串和message 同時(shí)傳遞的Transferable對(duì)象
例如
//http://locahost:8080/test1.html
<iframe id="ifraTs2" src="http://localhost:9090/test2.html" >
<scirpt>
var message = "Hello";
var targetOrigin = "http://localhost:9090";
$('#ifraTs2'). contentWindow.postMessage(message,targetOrigin);
</script>
//test2.html 接收消息頁面添加message監(jiān)聽
<script>
window.addEventListener("message",function(event) {
//判斷信息來源地址
if(event. origin == "http://localhost:8080"){
}
})
</script>
3诈闺、后臺(tái)攔截器進(jìn)行請(qǐng)求頭修改
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.addHeader("Access-Control-Allow-Headers",
"Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,token");
return true;
}
4配置nginx
通過nginx來進(jìn)行不同服務(wù)器的跳轉(zhuǎn)
個(gè)人推薦nginx進(jìn)行跨域問題解決