斷斷續(xù)續(xù)看這個問題好幾天了橘蜜,以下做一下簡單總結(jié)锋叨。
問題描述
瀏覽器有同源限制(即協(xié)議垄分、域名、端口相同
)娃磺,如果頁面A想要訪問另外一個非同源頁面B(不清楚怎么描述薄湿,理解為一個URL
)提供的WebAPI,則瀏覽器是不允許的豌鸡。
問題本質(zhì)
跨域并非瀏覽器限制了發(fā)起跨站請求
嘿般,而是跨站請求可以正常發(fā)起,但是返回結(jié)果被瀏覽器攔截了
涯冠。最好的例子是CSRF跨站攻擊原理,請求是發(fā)送到了后端服務(wù)器無論是否跨域逼庞!注意:有些瀏覽器不允許從HTTPS的域跨域訪問HTTP
蛇更,比如Chrome和Firefox,這些瀏覽器在請求還未發(fā)出的時候就會攔截請求赛糟,這是一個特例派任。這本質(zhì)是瀏覽器實現(xiàn)的問題
。
解決方案
JSONP方式
服務(wù)器端
將數(shù)據(jù)以jsonp方式包裹起來璧南,再在瀏覽器端以jsonp方式訪問掌逛。Access-Control-Allow-Origin
方式
服務(wù)器端
返回的數(shù)據(jù)Header中添加Access-Control-Allow-Origin
控制為*
,則可以供非同源網(wǎng)頁訪問。
[注]這兩種方式都需要服務(wù)器端配合司倚,沒法只在瀏覽器端修改來實現(xiàn)豆混。