1. 什么是同源策略
同源策略(Same origin Policy):瀏覽器出于安全方面的考慮,只允許與本域下的接口交互荔烧。不同源的客戶端腳本在沒有明確授權的情況下蛔琅,不能讀寫對方的資源符衔。
本域指的是:
- 同協(xié)議:如都是http或者https
- 同域名:如都是http://jirengu.com/××× 和http://jirengu.com/×××
- 同端口:如都是80端口
不同源的例子:
http://jirengu.com/main.js 和 https://jirengu.com/a.php (協(xié)議不同)
http://jirengu.com/main.js 和 http://bbs.jirengu.com/a.php (域名不同,域名必須完全相同才可以)
http://jiengu.com/main.js 和 http://jirengu.com:8080/a.php (端口不同,第一個是80)
需要注意的是: 對于當前頁面來說頁面存放的 JS 文件的域不重要丈屹,重要的是加載該 JS 頁面所在什么域
2. 什么是跨域调俘?跨域有幾種實現形式
跨域,指的是瀏覽器不能執(zhí)行其他網站的腳本旺垒。它是由瀏覽器的同源策略造成的彩库,是瀏覽器對JavaScript施加的安全限制。
實現方式:
1.JSONP
html中script標簽可以引入其他域下的js先蒋,比如引入線上的jquery庫骇钦。利用這個特性,可實現跨域訪問接口竞漾。需要后端支持
2.CORS
CORS 全稱是跨域資源共享(Cross-Origin Resource Sharing)眯搭,是一種 ajax 跨域請求資源的方式。
3.降域
通過修改document.domain來跨域业岁,但條件是域名要相似鳞仙,例如:http://a.jrg.com/a.html
和http://b.jrg.com/a.html
可以令document.domain = "jrg.com"
進行降域達到跨域的目的。
4.postMessage
postMessage()方法允許來自不同源的腳本采用異步方式進行有限的通信笔时,可以實現跨文本檔棍好、多窗口、跨域消息傳遞糊闽。
3. JSONP 的原理是什么
JSONP是通過動態(tài)<script>元素來使用的梳玫,使用時可以理解為src屬性制定一個跨域URL。這里的<script>元素有能力不受限制的從其他域加載資源右犹。因為JSONP是有效的JavaScript代碼提澎,所以在請求完成后,即在JSONP響應加載到頁面中以后念链,就會立即執(zhí)行盼忌。
JSONP由兩部分組成:回調函數和數據积糯。回調函數是響應到來時應該在頁面中調用的函數谦纱】闯桑回調函數的名字一般在請求中指定的。而數據就是傳入回調函數中的JSON數據跨嘉。
4. CORS是什么
CORS 全稱是跨域資源共享(Cross-Origin Resource Sharing)川慌,是一種 ajax 跨域請求資源的方式,支持現代瀏覽器祠乃,IE支持10以上梦重。 實現方式很簡單,當你使用 XMLHttpRequest 發(fā)送請求時亮瓷,瀏覽器發(fā)現該請求不符合同源策略琴拧,會給該請求加一個請求頭:Origin,后臺進行一系列處理嘱支,如果確定接受請求則在返回結果中加入一個響應頭:Access-Control-Allow-Origin; 瀏覽器判斷該相應頭中是否包含 Origin 的值蚓胸,如果有則瀏覽器會處理響應,我們就可以拿到響應數據除师,如果不包含瀏覽器直接駁回沛膳,這時我們無法拿到響應數據。所以 CORS 的表象是讓你覺得它與同源的 ajax 請求沒啥區(qū)別馍盟,代碼完全一樣于置。
5. 根據視頻里的講解演示三種以上跨域的解決方式
配置host:
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
127.0.0.1 a.lee.com
127.0.0.1 b.lee.com
127.0.0.1 lee.com
1.JSONP
代碼地址
2.CORS
代碼地址
3.降域
代碼地址
4.postMessage
代碼地址