前端跨域的解決方法

介紹 :?

域名級數(shù) 是指一個域名由多少級組成,域名的各個級別被“.”分開,簡而言之,有多少個點就是幾級域名。

子域名:? 是一級域名的下一級 ,如 m

主域 ?:? 因為IP地址是純數(shù)字,比較難記,所以,在Internet上一般用域名來代替IP地址,從右到左依次為最高域名段、次高域名段等,最左的一個字段為主機名。如 meilishuo

一級域名(頂級域名) : 主域名(meilishuo) + ?"." ?+ 頂級域名(com)組成,如【meilishuo.com】

二級域名 :二級域名是指頂級域名之下的域名,如 m.meilishuo.com

(二級域名及其以上級別的域名,統(tǒng)稱為子域名,不在“注冊域名”的范疇中。)

三級域名 :?

泛域名 :指一個域名下的所有子域名都被解析到同一個IP地址上。


同源策略

PS:?

1,如果是端口和協(xié)議造成的跨域,前臺表示無能為力

2,在跨域問題上,域僅僅是通過“URL的首部”來識別,不會去嘗試判斷相同的ip地址對應著兩個域或兩個域是否在同一個ip上。


解決方案 :?

1> document.domain + iframe? ? ? (只有在主域相同的時候才能使用該方法)

2> 動態(tài)創(chuàng)建script (因為script標簽不受同源策略的限制。)

3> location.hash + iframe

原理是利用location.hash來進行傳值。

假設域名a.com下的文件cs1.html要和cnblogs.com域名下的cs2.html傳遞信息。

1) cs1.html首先創(chuàng)建自動創(chuàng)建一個隱藏的iframe,iframe的src指向cnblogs.com域名下的cs2.html頁面

2) cs2.html響應請求后再將通過修改cs1.html的hash值來傳遞數(shù)據(jù)

3) 同時在cs1.html上加一個定時器,隔一段時間來判斷l(xiāng)ocation.hash的值有沒有變化,一旦有變化則獲取獲取hash值

注:由于兩個頁面不在同一個域下IE、Chrome不允許修改parent.location.hash的值,所以要借助于a.com域名下的一個代理iframe

4> window.name + iframe ( window.name 的美妙之處:name 值在不同的頁面(甚至不同域名)加載后依舊存在,并且可以支持非常長的 name 值(2MB)。)?

5> postMessage(HTML5中的XMLHttpRequest Level 2中的API)

6> CORS( CORS背后的思想,就是使用自定義的HTTP頭部讓瀏覽器與服務器進行溝通,從而決定請求或響應是應該成功,還是應該失敗。)

7> JSONP

JSONP包含兩部分:回調函數(shù)和數(shù)據(jù)。

回調函數(shù)是當響應到來時要放在當前頁面被調用的函數(shù)。

數(shù)據(jù)就是傳入回調函數(shù)中的json數(shù)據(jù),也就是回調函數(shù)的參數(shù)了。

8> web sockets

web sockets是一種瀏覽器的API,它的目標是在一個單獨的持久連接上提供全雙工、雙向通信。(同源策略對web sockets不適用)

web sockets原理:在JS創(chuàng)建了web socket之后,會有一個HTTP請求發(fā)送到瀏覽器以發(fā)起連接。取得服務器響應后,建立的連接會使用HTTP升級從HTTP協(xié)議交換為web sockt協(xié)議。

只有在支持web socket協(xié)議的服務器上才能正常工作。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容