JSONP(JSON with Padding)是一種常用的跨域數據請求策略,它的基本原理是利用 <script> 標簽的 src 屬性沒有同源策略限制的特性來達到跨域的目的。
我們來詳細解析 JSONP 的工作原理:
- 構造請求:在前端,我們首先構造一個請求 URL,將需要的數據以查詢參數的形式附加到 URL 上。這個 URL 通常還會包含一個特殊的查詢參數,例如 callback,用來指定一個回調函數的名稱。
- 創建 script 標簽:然后,我們動態創建一個 <script> 標簽,并將其 src 屬性設置為上一步構造的 URL。這個 <script> 標簽一旦被插入到 html 文檔中,瀏覽器就會開始加載 src 指向的資源。
- 服務器響應:服務器接收到請求后,從查詢參數中提取數據并進行處理。處理完畢后,服務器將處理結果包裹在一個函數調用中返回。這個函數的名稱就是前端在請求中指定的回調函數的名稱。
- 執行回調函數:當瀏覽器接收到服務器的響應后,由于響應內容是一個函數調用,所以瀏覽器會嘗試執行這個函數。前端需要預先定義這個回調函數,以處理從服務器接收到的數據。
JSONP 的缺點是只能進行 GET 請求,不能進行 POST 或其他類型的 HTTP 請求。此外,由于是通過插入 <script> 標簽的方式獲取數據,如果服務器響應的數據中含有惡意腳本,那么這些腳本將會被執行,從而帶來安全風險。
由于以上缺點,現在更推薦使用 CORS(跨源資源共享)來進行跨域請求,CORS 不僅支持所有類型的 HTTP 請求,而且更安全。