1、同源策略
同源策略是眾多的安全策略之一,是在web層面上的策略。同源策略規定:
不同域的客戶端腳本在沒有明確授權的情況下,不能讀寫對方的資源,注意關鍵詞:不同域、客戶端腳本、授權、讀寫、資源
- 不同域:同域指的是要求兩個站點同協議、同域名、同端口,如判斷下列站點與
http://www.foo.com
是否同域?
https://www.foo.com 不同域(協議不同)
http://team.foo.com 不同域(team子域與www子域不同)
http://foo.com 不同域(頂級域與www子域不是一個概念)
http://www.foo.com 不同域(端口不同,默認為80端口)
http://www.foo.com/a 同域
- 客戶端腳本:一般指JavaScript
- 授權:HTML5標準中關于Ajax跨域訪問的情況,默認情況下是不允許跨域訪問的,只有目標站點(默認http://www.foo.com) 明確的返回HTTP響應頭
Access-Control-Allow-Origin:http://www.foo1.com
,那么www.foo1.com站點上的客戶端腳本就有權通過Ajax對目標站點(www.foo.com)上的數據進行讀寫操作 - 讀寫權限:web上的資源很多,有的只有讀權限,有的同時有讀寫權限。如請求頭的Referer只讀,而document.cookie具備讀寫權限,這主要是從安全的角度區分的
-資源:同源策略中資源指的是客戶端的資源,常見的有HTTP消息頭、DOM樹、瀏覽器存儲等。在同一個域內,客戶端的腳本可以任意讀寫同域內的資源,前提是這個資源是可讀寫的
2、 跨域和跨域有幾種實現形式?
跨域:允許不同域的接口進行交互
實現形式:JSOP、CORS、降域、postMessage
3、 JSONP 的原理是什么?
客戶端
服務端
- 1、首先在客戶端腳本中定義一個數據處理函數fun",
- 2、在上述定義的腳本中使用DOM創建script標簽,src的地址執行后端接口,最后加參數callback=fun",
- 3、服務端在收到請求,解析參數,返回fun(data)字符串",
- 4、function(data)會放在script標簽作為js執行,此時調用fun函數,將data作為參數"
4、 CORS
在HTML5標準中關于Ajax跨域訪問的情況,默認情況下是不允許跨域訪問的,只有目標站點(默認http://www.foo.com) 明確的返回HTTP響應頭Access-Control-Allow-Origin:http://www.foo1.com
,那么www.foo1.com站點上的客戶端腳本就有權通過Ajax對目標站點(www.foo.com)上的數據進行讀寫操作