題目1: 什么是同源策略
瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權的情況下,不能讀寫對方的資源。
如: http://jirengu.com/a/b.js 和 http://jirengu.com/index.php (同源)
- 本域指的是:
同協議:如都是http或者https
同域名:如都是http://jirengu.com/a 和http://jirengu.com/b
同端口:如都是80端口
題目2: 什么是跨域?跨域有幾種實現形式
加載該 JS 頁面所在域與與被請求頁面所在域不一致
- CORS(Cross-origin resource sharing): http://www.ruanyifeng.com/blog/2016/04/cors.html
- 降域:設置document.domain
- window.postMessage(message,targetOrigin)
(關于跨域)
題目3: JSONP 的原理是什么
就是利用<script>標簽沒有跨域限制的“漏洞”來達到與第三方通訊的目的。當需要通訊時,本站腳本創建一個<script>元素,地址指向第三方的API網址,形如:
<script src="http://www.example.net/api?param1=1¶m2=2"></script>
并提供一個回調函數來接收數據(函數名可約定,或通過地址參數傳遞)。
第三方產生的響應為json數據的包裝(故稱之為jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
這樣瀏覽器會調用callback函數,并傳遞解析后json對象作為參數。本站腳本可在callback函數里處理所傳入的數據。
題目4: CORS是什么
- CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。
- 瀏覽器將CORS請求分成兩類:簡單請求(simple request)和非簡單請求(not-so-simple request)。
- 對于簡單請求,瀏覽器直接發出CORS請求。具體來說,就是在頭信息之中,增加一個Origin字段。
- 非簡單請求是對服務器有特殊要求的請求,比如請求方法是PUT或DELETE,或者Content-Type字段的類型是application/json。非簡單請求的CORS請求,會在正式通信之前,增加一次HTTP查詢請求,稱為"預檢"請求(preflight),"預檢"請求用的請求方法是OPTIONS。瀏覽器先詢問服務器,當前網頁所在的域名是否在服務器的許可名單之中,以及可以使用哪些HTTP動詞和頭信息字段。只有得到肯定答復,瀏覽器才會發出正式的XMLHttpRequest請求,否則就報錯。
來源
題目5: 根據視頻里的講解演示三種以上跨域的解決方式 ,寫成博客
https://github.com/peaceChierdo/demo/tree/master/%E8%B7%A8%E5%9F%9F