1. 程式人生 > 其它 >JSONP實現跨域資源共享

JSONP實現跨域資源共享

首先要清楚,跨域請求會受到限制(因為同源策略的實施)

在如今,解決跨域問題一般通過跨域資源共享(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方式來跨域互動的確得到了很多方面的支援。

 

人人須日日改過,一旦無過可改,即一日無步可過矣。若發現不妥的點請務必指出,非常感謝。