cors
- 1壳影、有兼容性問題。
- 2弥臼,通過后端設(shè)置響應(yīng)頭
(Access-Control-Allow-Origin)宴咧,里面可以設(shè)置兩種形式,一種是‘*’径缅,允許所有請求跨域掺栅,另一種是設(shè)置指定的具體地址,它只允許指定的這個地址跨域纳猪。
jsonp
- 1氧卧、不好的地方,只支持get請求氏堤,但是兼容性比較好沙绝;
- 2,原理就是利用在HTML中一些帶有src的標(biāo)簽,比如說script標(biāo)簽宿饱,利用標(biāo)簽的漏洞熏瞄,它不會有跨域問題,因為script標(biāo)簽是用來引入外部資源的谬以,它在引入外部資源的時候强饮,并不會受瀏覽器同源策略的限制,我們正是通過這個漏洞为黎,在向后端發(fā)起請求后邮丰,后端有所返回,我們在路徑url上拼接一個我們當(dāng)前頁面的函數(shù)(callback)铭乾,后端拿到這個函數(shù)剪廉,當(dāng)后端把這個函數(shù)返回并執(zhí)行的時候,那么它在返回的過程中炕檩,它會把這句代碼加入到我們前端document中script的標(biāo)簽中斗蒋,這個時候這個代碼執(zhí)行完之后,它就拿著這段代碼笛质,去window的全局作用域去找傳給后端的函數(shù)泉沾,在這個過程中我們攜帶我們的參數(shù)就能拿到
- 2、它是一種非正式的數(shù)據(jù)交換協(xié)議妇押。
domain
- 1跷究、它的缺陷:只能是主域名相同,子域名不同或者端口不同的情況下才能完成跨域敲霍,前提條件就是主域名必須相同
- 2俊马、通過document.domain設(shè)置兩個需要跨域的頁面的同樣的主域名,通過iframe肩杈,就可以進(jìn)行跨域了柴我;
postMessagre
- 1、 它是由h5提出的扩然;
- 2艘儒、一個通過window.addEventListener去監(jiān)聽message事件,另一個通過window.postMessage与学,第一個參數(shù)是要傳的數(shù)據(jù)彤悔,第二個是要傳給誰的具體的地址。
設(shè)置正向代理
- 我們自己可以起一個node服務(wù)索守,因為服務(wù)端和服務(wù)端交互是沒有跨域問題的晕窑,跨域是瀏覽器同源策略的一個限制,它不屬于服務(wù)器端卵佛,我們可以通過用node去寫一個中間層然后去請求另一個服務(wù)器杨赤,拿到數(shù)據(jù)以后我們在我們的服務(wù)器上去解決跨域敞斋,然后把拿到的數(shù)據(jù)返回去。
window.name
- 在同一個type下疾牲,它會認(rèn)為是同一個窗口植捎,通過window.name進(jìn)行傳參
- 只有window.name可以做到這么傳參,其他是不可以做到的
- 它也有不好處阳柔,就是它所支持的數(shù)據(jù)量有限焰枢,一般為2M,IE和firefox下可以大致32M左右舌剂。