JSONP實現跨域資源共享
阿新 • • 發佈:2022-03-23
首先要清楚,跨域請求會受到限制(因為同源策略的實施)
在如今,解決跨域問題一般通過跨域資源共享(CORS,Cross-Origin Resource Sharing)機制來解決。
就以前後端分離專案來說,大體是這樣的:伺服器端設定“白名單”——允許那些域來使用介面,而在請求端則無須做什麼。
在CORS機制沒有被廣泛支援之前,很多的是通過JSONP來實現跨域資源訪問的。
JSONP(JSON with padding),是在Web服務上流行的一種JSON變體。——《JavaScript高階程式設計(第4版)》
根據JSONP的使用方式,我對JSONP的認識是:JSONP傳輸的內容就是JavaScript程式碼。
在HTML中,通過<script>元素及該元素的src屬性來對伺服器介面進行請求,
而伺服器端則相應地返回JavaScript程式碼。
至於兩端之間如何進行交流就看例子理解:
伺服器端(Java):一個普通實體物件
伺服器端的一個介面:
前端程式碼:
<!DOCTYPE html> <head> <meta charset="UTF-8"> <title>rich</title> </head> <body> <script> function handleResponse(response) { console.log('response:', response); } const script = document.createElement("script"); script.src = "http://localhost:8080/test?callback=handleResponse"; document.body.insertBefore(script, document.body.firstChild); </script> </body> </html>
控制檯輸出結果:
結論
請求端是通過<script>元素的src屬性來請求的,而該請求所期望得到的資料是一份JavaScript程式碼。
伺服器端返回了一串字元,而該字串對於JS環境來說是一段JS程式碼:呼叫一個函式的js語句;
通過給js方法傳遞引數的方式達到了響應請求並傳遞資料的效果。
對於HTML來說,script元素引入的就是一段呼叫函式的js語句。
在除錯這些程式碼時發現,後端方面也提供了一些JSONP效果的工具:(這塊不要緊,單純記一下)
這讓我意識到通過JSONP方式來跨域互動的確得到了很多方面的支援。
人人須日日改過,一旦無過可改,即一日無步可過矣。若發現不妥的點請務必指出,非常感謝。