jsonp解決跨域問題

1.什么是跨域?
跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制。

所謂同源是指,域名,協(xié)議,端口均相同,不明白沒關系,舉個栗子:

http://www.123.com/index.html 調(diào)用 http://www.123.com/server.php (非跨域)

http://www.123.com/index.html 調(diào)用 http://www.456.com/server.php (主域名不同:123/456,跨域)

http://abc.123.com/index.html 調(diào)用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html 調(diào)用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

http://www.123.com/index.html 調(diào)用 https://www.123.com/server.php (協(xié)議不同:http/https,跨域)

請注意:localhost和127.0.0.1雖然都指向本機,但也屬于跨域。

瀏覽器執(zhí)行javascript腳本時,會檢查這個腳本屬于哪個頁面,如果不是同源頁面,就不會被執(zhí)行。

2.如何解決跨域問題

1、通過后臺解決跨域問題:js向服務器發(fā)送請求,然后讓服務器去另一個域上獲取數(shù)據(jù)后返回。該方式我是比較喜歡的,需要自己寫http請求,去請求另一個域的服務器的數(shù)據(jù),然后將得到的數(shù)據(jù)提交給前臺。

2、在前端解決跨域問題:用JSONP。

JSONP
JSONP只支持GET請求,不支持POST請求

例子:
頁面1.
app.use("/tJsonp", require("./routes/tJsonp"));
頁面2.
var express = require('express');
var router = express.Router();
router.get('/', main);
function main(req, res) {
var sysType=req.query.sysType;
var token=req.session.investorToken || "";
if(sysType == 1){
token=req.session.merchantToken || "";
}else if(sysType==3){
token=req.session.channelToken || "";
}else if(sysType==4){
token=req.session.adminToken || "";
}
res.end("callback('"+token+"')");
}
module.exports = router;
使用:
在其他域名下
<script>
$.ajax({
url:"http://uplogin.upyyx.com/tJsonp?sysType=4",
dataType:"jsonp"
})
window.callback = function(o) {
console.info("###",o);
if(o){
window.localStorage.setItem("token",o);
angular.bootstrap(document, ["app"]);
}else {
location.href = "http://uplogin.upyyx.com";
}
}
</script>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容