JSONP,跨域

1.什么是同源策略

同domain(或ip),同端口,同協議視為同一個域,一個域內的腳本僅僅具有本域內的權限,可以理解為本域腳本只能讀寫本域內的資源,而無法訪問其它域的資源。這種安全限制稱為同源策略。

2.什么是跨域?跨域有幾種實現形式

概念:只要協議、域名、端口有任何一個不同,都被當作是不同的域。

URL                      說明       是否允許通信
http://www.a.com/a.js
http://www.a.com/b.js     同一域名下   允許
-------------------------------
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夾 允許
-------------------------------
http://www.a.com:8000/a.js
http://www.a.com/b.js     同一域名,不同端口  不允許
-------------------------------
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同協議 不允許
-------------------------------
http://www.a.com/a.js
http://70.32.92.74/b.js 域名和域名對應ip 不允許
------------------------------
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允許
-------------------------------
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二級域名(同上) 不允許(cookie這種情況下也不允許訪問)
-------------------------------
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允許

跨域實現形式:

  • 通過jsonp跨域
  • 通過修改document.domain來跨子域
  • 使用window.name來進行跨域
  • 使用HTML5的window.postMessage方法跨域

3.JSONP 的原理是什么

XMLHttpRequest不能跨域,但是<script>標簽的src可以跨域,所以jsonp正是利用這個特性來實現的.當需要通訊時,本站腳本創建一個<script>元素,地址指向第三方的API網址,并提供一個回調函數來接收數據(函數名可約定,或通過地址參數傳遞),第三方產生的響應為json數據的包裝(故稱之為jsonp,即json padding),形如:callback({"name":"hax","gender":"Male"})。這樣瀏覽器會調用callback函數,并傳遞解析后json對象作為參數。本站腳本可在callback函數里處理所傳入的數據。

<script type="text/javascript">
    function dosomething(jsondata){
        //處理獲得的json數據
    }
</script>
<script src="http://example.com/data.php?callback=dosomething"></script>

js文件載入成功后會執行我們在url參數中指定的函數,并且會把我們需要的json數據作為參數傳入。所以jsonp是需要服務器端的頁面進行相應的配合的。

4. CORS是什么

CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。CORS需要瀏覽器和服務器同時支持。目前,所有瀏覽器都支持該功能,IE瀏覽器不能低于IE10。整個CORS通信過程,都是瀏覽器自動完成,不需要用戶參與。對于開發者來說,CORS通信與同源的AJAX通信沒有差別,代碼完全一樣。瀏覽器一旦發現AJAX請求跨源,就會自動添加一些附加的頭信息,有時還會多出一次附加的請求,但用戶不會有感覺。
因此,實現CORS通信的關鍵是服務器。只要服務器實現了CORS接口,就可以跨源通信。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 什么是同源策略 同源政策(same-origin policy)是指同域名(或ip),同端口,同協議視為同一個域,...
    小囧兔閱讀 554評論 0 1
  • 1.什么是同源策略瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權的情況下,不...
    24_Magic閱讀 520評論 0 0
  • 1- 同源策略: 首先理解什么叫同源同源指的是協議、域名、端口都必須一致。只要其中一個不一致都不是同源。 瀏覽器中...
    osborne閱讀 182評論 0 1
  • 1: 什么是同源策略 最初,它的含義是指,A網頁設置的 Cookie,B網頁不能打開,除非這兩個網頁"同源",所謂...
    好奇而已閱讀 311評論 0 0
  • 文 / 量子力學編輯部 / 木白 木白和木黑是一對帥氣的雙胞胎兄弟。 但是從出生那天開始,木白和木黑的身上就發生著...
    Bai白話閱讀 2,725評論 5 7