JSONP 跨域原理

轉(zhuǎn)載請注明出處,點擊此處可了解 StoneHui 更多信息

前置知識點: 同源策略 & 跨域

什么是 JSONP?

JSONPJSON with Padding)是資料格式JSON的一種“使用模式”,可以讓網(wǎng)頁從別的網(wǎng)域獲取資料。 —— 維基百科

JSONP 核心原理

  • script 標簽不受同源策略影響。
  • 動態(tài)插入到 DOM 中的 script 腳本可以立即得到執(zhí)行。

實現(xiàn)步驟

  1. 客戶端創(chuàng)建一個 JavaScript 函數(shù),用來接收服務(wù)端返回的數(shù)據(jù)。
function onResponse(data) {
    // do something
}
  1. 客戶端動態(tài)插入 script 標簽執(zhí)行請求。
var script = document.createElement('script')
script.src = 'protocal://domain:port/path?callback=onResponse'
document.head.appendChild(script)
document.head.removeChild(script)
  1. 服務(wù)端將數(shù)據(jù)和 js 回調(diào)函數(shù)名拼接為函數(shù)調(diào)用的字符串并返回給客戶端。
app.get('/path', function(request, response) {
    var data = getData()
    var callback = request.query.callback
    var result = `${callback}(${JSON.stringify(data)});`
    response.send(result)
})
  1. 客戶端接收到 script 標簽響應(yīng)并自動執(zhí)行回調(diào)函數(shù)。

JSONP 的缺點

  • 只能使用 GET 請求。
  • 動態(tài)插入的 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ā)布平臺,僅提供信息存儲服務(wù)。

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

  • 利用 頁面上 script 標簽可以跨域,并且其 src 指定的js腳本到達瀏覽器會執(zhí)行的特性,我們可以進行跨域取...
    tobAlier閱讀 2,592評論 3 1
  • 瀏覽器的同源策略: 同源策略(Same Origin Policy)是一種約定,它是由Netscape提出的一個著...
    也許會了閱讀 250評論 0 0
  • JSONP 從這一部分開始了解一下前后端分離的思想:javascript高級部分:前后端聯(lián)動,瀏覽器+服務(wù)器 數(shù)據(jù)...
    如夢初醒Tel閱讀 1,148評論 0 0
  • 1、一個眾所周知的問題,Ajax直接請求普通文件存在跨域無權(quán)限訪問的問題,甭管你是靜態(tài)頁面、動態(tài)網(wǎng)頁、web服務(wù)、...
    飛飛廉閱讀 357評論 0 1
  • 跨域初步 因為ajax受到同源策略的限制,不能跨域讀取數(shù)據(jù)。 但有些屬性不受同源策略影響,比如script標簽的s...
    生活是什么呢閱讀 268評論 0 0

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