什么是同源策略
同源策略是瀏覽器最基本的功能寂拆,同源指得是相同的域名、協(xié)議和端口號抓韩,不同的源的客戶端腳本在沒有明確授權(quán)的情況下纠永,無法相互讀取對方的資源稱之為同源策略。
什么是跨域谒拴?跨域有幾種實現(xiàn)形式
跨域就是突破同源策略的限制尝江,使一個域名的網(wǎng)頁可以請求另一個域名的資源。實現(xiàn)方式:
降域
document.domain
:
前提條件:這兩個域名必須屬于同一個基礎(chǔ)域名!而且所用的協(xié)議英上,端口都要一致炭序,否則無法利用document.domain進行跨域
同時為兩個域設(shè)置document.domain= xxx.com
(少用、慎用善延,有安全問題)jsonp :
利用script的src標簽的跨域?qū)傩陨偬瑐鬟f一個callback參數(shù)給服務(wù)端來獲取其他源的數(shù)據(jù)cors 跨域資源共享:
在HTTP請求里添加特殊的頭,允許服務(wù)器指定特定的域名可以跨域訪問易遣。利用hash :
通過給b頁面hash值做為參數(shù)傳遞數(shù)據(jù)彼妻,在a頁面添加隱藏的iframe(b頁面),添加定時器判斷hash值有無發(fā)生變化豆茫,有變化則獲取hash值侨歉,缺點是數(shù)據(jù)量較小,而且此方法比較饒揩魂,不推薦使用幽邓。利用
window.name
:
此方法比較饒,需要跳轉(zhuǎn)兩次頁面火脉。參考博客window.name實現(xiàn)的跨域數(shù)據(jù)傳輸HTML5 postMssage: html5引入的API,可以實現(xiàn)跨文檔牵舵、多窗口、跨域消息的傳遞倦挂。
可參考博客html5 postMessage解決跨域畸颅、跨窗口消息傳遞
jsonp的原理是什么
jsonp即json with padding,主要是利用script的src標簽的跨域?qū)傩裕瑐鬟f一個callback參數(shù)給服務(wù)端方援,讓服務(wù)器端返回可執(zhí)行的Javascript函數(shù)没炒,參數(shù)為要回發(fā)的數(shù)據(jù)。有兩個問題(缺點):
可能會被注入
callback = alert(1);
解決辦法為設(shè)置字符串過濾出其中的左右括號犯戏。如:callback = callback.replace(/\(/g,"")
只能用get傳輸數(shù)據(jù)送火,無法使用post方式進行傳輸拳话。
需要驗證身份(token),解決辦法是為callback參數(shù)設(shè)置兩個頁面共有cookie作為參數(shù)
JSON及JSONP的區(qū)別主要參考這篇博客
CORS是什么
CORS是一個W3C標準种吸,全稱是"跨域資源共享"(Cross-origin resource sharing)弃衍,避開了瀏覽器的同源策略,通過在http請求里添加特殊的頭骨稿,允許服務(wù)器指定哪些跨域請求是允許的笨鸡,與jsonp使用目的相同,但是要比jsonp更強大坦冠,缺點是不兼容老的IE瀏覽器形耗。如:
header("Access-Control-Allow-Origin:http://jiuyi.com")
//指定http://jiuyi.com 這個域可以請求它;
header("Access-Control-Allow-Origin:*")
//指定所有域都可以請求它辙浑;
練習題
- 演示同源策略激涤,如圖
- 使用降域演示跨子域,如圖
- 使用jsonp跨域,如圖
- 使用cors跨域判呕,如圖
- 本博客版權(quán)歸羞澀的澀和饑人谷所有倦踢,轉(zhuǎn)載請注明出處