跨域
什么是跨域?
跨域問題是由于javascript語言安全限制中的同源策略造成的塞颁。同源策略是由Netscape提出的一個著名的安全策略果漾。 現(xiàn)在所有支持JavaScript 的瀏覽器都會使用這個策略。同源策略阻止從一個域上加載的腳本去獲取或操作另一個域上的文檔屬性勾徽。也就是說,受到請求的 URL 的域必須與當(dāng)前 Web 頁面的域相同统扳。這說明瀏覽器隔離來自不同源的內(nèi)容喘帚,以防止它們之間的操作。所謂同源是指域名咒钟,協(xié)議啥辨,端口均相同。
同源的幾種情況:
不同域名屬于跨域盯腌,如:www.a.com和www.b.com溉知,另外www.a.com?和www.a.com.cn?也屬于不同域名。
主域名和子域名(二級域名、三級域名等)跨域级乍,如:www.a.com?和?sub.a.com屬于跨域舌劳,sub.a.com?和?sub1.a.com?之間也是跨域。
協(xié)議屬于跨域玫荣,如:http://www.a.com?和?https://www.a.com甚淡。
不同端口,如:?www.a.com:80和?www.a.com:81?捅厂。
IP和域名屬于跨域贯卦,如:123.125.106.16?和www.weibo.com。
為什么要跨越焙贷?
我們實際上做項目的時候撵割,不可避免地會根據(jù)項目需求進(jìn)行跨站訪問,子域和主域之間數(shù)據(jù)共享等辙芍,受到同源策略的影響啡彬,要滿足這些需求,就要用跨域技術(shù)來實現(xiàn)故硅。
跨域技術(shù)
設(shè)置頭文件:例如:
res.setHeader("Access-Control-Allow-Origin","*");
res.setHeader("Access-Control-Allow-Methods","GET,POST");
服務(wù)器代理:在服務(wù)器端設(shè)置代理文件庶灿,用來進(jìn)行跨域請求,客戶端直接發(fā)送本域內(nèi)的Ajax請求吃衅,從而達(dá)到跨域請求的目的往踢。特點:在客戶端不存在跨域請求。需要增加代理文件徘层,為了安全需要和對方約定峻呕。
jsonp:jsonp是一個簡單高效的跨域方式,它允許在服務(wù)器端集成Script tags返回至客戶端惑灵,通過javascript callback的形式實現(xiàn)跨域訪問。特點:不受同源策略的限制眼耀,兼容性更好英支,易于實現(xiàn),只支持get哮伟。