隨著Web應(yīng)用的日益復雜,面臨的安全問題也越來越復雜。其中一種比較常見的安全問題就是跨域攻擊。在許多網(wǎng)站中,一個網(wǎng)站需要從其它網(wǎng)站獲取數(shù)據(jù)或調(diào)用其它網(wǎng)站的功能,這就涉及到了跨域通訊的問題。
跨域通訊是指不同域名之間的JavaScript代碼的執(zhí)行,而同一域名內(nèi)的JavaScript代碼執(zhí)行是不涉及跨域問題的。例如,www.abcd.com 和 www.efgh.com 是不同的域名,它們之間的JavaScript代碼執(zhí)行就需要進行跨域通訊。
一般來說,JavaScript代碼不能訪問不同域名下的頁面和數(shù)據(jù),這是出于安全考慮。但是,由于某些特殊的需求,我們需要解決跨域通訊的問題。以下是一些常見的跨域通訊方式。
1. 跨域資源共享(CORS)
跨域資源共享(CORS)是基于HTTP協(xié)議的一個解決方案,它是由W3C組織制定的一個標準。CORS需要服務(wù)器端的支持,相當于服務(wù)器告訴瀏覽器可以跨域訪問它的資源。在客戶端的JavaScript代碼中,可以使用XMLHttpRequest對象來訪問跨域的資源。
var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://www.efgh.com/data', true); xhr.withCredentials = true; xhr.send();
在上面的例子中,我們使用XMLHttpRequest對象訪問了 http://www.efgh.com/data 這個網(wǎng)址,這個網(wǎng)址是跨域的,但是服務(wù)器端允許了我們訪問。xhr.withCredentials = true; 是用來告訴瀏覽器在訪問跨域的資源時要攜帶cookie。
2. JSONP
JSONP是一種利用