跨域的原因,場景,方法


一 跨域的原因

很多朋友不知道為什么要跨域 其實跨域請求存在的原因:由於瀏覽器的同源策略,即屬於不同域的頁面之間不能相互訪問各自的頁面內容。

那么什么是同源策略呢?

簡單說來就是同協議,同域名,同端口。

二 跨域的場景

1.域名不同 www.yangwei.com 和www.wuyu.com 即為不同的域名)

2.二級域名相同,子域名不同(www.wuhan.yangwei.com www.shenzheng.yangwei.com 為子域不同)

3.端口不同,協議不同  ( http://www.yangwei.com 和https://www.yangwei.com屬於跨域www.yangwei.con:8888和www.yangwei.con:8080)

三 跨域的方式

1.前端的方式: possMessage,window.name,document.domain,image.src(得不到數據返回),jsonP(script.src后台不配合得不到數據返回),style.href(得不到數據返回)

一.imge.src,script.src,style.href 不受同源策略的影響可以加載其他域的資源,可以用這個特性,向服務器發送數據。最常用的就是使用image.src 向服務器發送前端的錯誤信息。image.src 和style.href 是無法獲取服務器的數據返回的,script.src 服務器端配合可以得到數據返回。

二possMessage,window.name,document.domain 是兩個窗口直接相互傳遞數據。

(1)possMessage 是HTML5中新增的,使用限制是 必須獲得窗口的window 引用。IE8+支持,firefox,chrome,safair,opera支持

  (2)window.name ,在一個頁面中打開另一個頁面時,window.name 是共享的,所以可以通過window.name 來傳遞數據,window.name的限制大小是2M,這個所有瀏覽器都支持,且沒有什么限制。

3) document.domain 將兩個頁面的document.domain 設置成相同,document.domain 只能設置成父級域名,既可以訪問,使用限制:這頂級域名必須相同

2.純后端方式: CORS,服務器代理

CORS 是w3c標准的方式,通過在web服務器端設置:響應頭Access-Cntrol-Alow-Origin 來指定哪些域可以訪問本域的數據,ie8&9(XDomainRequest),10+,chrom4 ,firefox3.5,safair4,opera12支持這種方式。

服務器代理,同源策略只存在瀏覽器端,通過服務器轉發請求可以達到跨域請求的目的,劣勢:增加服務器的負擔,且訪問速度慢。

3.前后端結合:JsonP

script.src 不受同源策略的限制,所以可以動態的創建script標簽,將要請求數據的域寫在src 中參數中附帶回調的方法,服務器端返回回調函數的字符串,並帶參數。

如 script.src="http://www.yangwei.com/?id=001&callback=getInfoCallback,服務器端返回 getInfoCallBack("name:yangwei;age:18") 這段代碼會直接執行,在前面定義好getInfoCallBack函數,既可以獲得數據並解析。 這種是最長見的方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM