jsonp跨域解析

背景:

由于瀏覽器同源策略的限制,非同源下的請求,都會產(chǎn)生跨域問題,jsonp即是為了解決這個問題出現(xiàn)的一種簡便解決方案。

什么是同源?

同源策略即:同一協(xié)議,同一域名,同一端口號。當(dāng)其中一個不滿足時,我們的請求即會發(fā)生跨域問題。

舉個簡單的例子:

http://www.abc.com:3000https://www.abc.com:3000的請求會出現(xiàn)跨域(協(xié)議不同)
http://www.abc.com:3000http://www.abc.com:3001的請求會出現(xiàn)跨域(端口不同)
http://www.abc.com:3000http://www.def.com:3000的請求會出現(xiàn)跨域(域名不同)

我們注意到src和href都可以進(jìn)行跨域請求(一個get請求)

jsonp就是使用通源策略這一“漏洞”,實現(xiàn)的跨域請求(這也是jsonp跨域只能用get請求的原因所在)。想象一下,既然是個get請求,那么服務(wù)端一定可以接收到,并做出反饋。ok,知道這兩點之后,我們開始具體使用jsonp進(jìn)行跨域請求。


<button id="btn">點擊</button> 
 <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script> 
 <script>   
 $('#btn').click(function(){            
var frame = document.createElement('script');           
frame.src = 'http://localhost:3000/article-list?name=leo&age=30&callback=func'; 
$('body').append(frame);    
    
});             
function func(res){         
alert(res.message+res.name+'你已經(jīng)'+res.age+'歲了');     
}  </script>

上述代碼其實是一個get請求,服務(wù)器對于get請求一定可以收到,并做出回應(yīng)。

貼一下服務(wù)器的流程

router.get('/article-list', 
(req, res) => {  
console.log(req.query, '123'); 
 let data = {    
message: 'success!',    
name: req.query.name,    
age: req.query.age  
} 
 data = JSON.stringify(data)  
res.end('func(' + data + ')');});

看到返回的是'func(' + data + ')',到前端就是調(diào)用回調(diào)函數(shù)。

其實jsonp的整個過程就類似于前端聲明好一個函數(shù),后端返回執(zhí)行函數(shù)。執(zhí)行函數(shù)參數(shù)中攜帶所需的數(shù)據(jù)。

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

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

  • JavaScript是一種在Web開發(fā)中經(jīng)常使用的前端動態(tài)腳本技術(shù)。在JavaScript中,有一個很重要的...
    西瓜w閱讀 1,909評論 0 1
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    Yaoxue9閱讀 1,412評論 0 6
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    他方l閱讀 1,134評論 0 2
  • 什么是跨域 跨域,是指瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對JavaScript實...
    HeroXin閱讀 955評論 0 4
  • 什么是跨域 JavaScript出于安全方面的考慮,不允許跨域調(diào)用其他頁面的對象。那什么是跨域呢,簡單地理解就是因...
    oWSQo閱讀 498評論 1 3

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