摘要:只要協(xié)議域名端口有任何一個不同,都被當(dāng)作是不同的域,之間的請求就是跨域操作。
什么是跨域請求?
當(dāng)瀏覽器執(zhí)行一個腳本時會檢查是否同源,只有同源的腳本才會執(zhí)行,如果不同源即為跨域
什么是同源?
同源即:由Netscape提出的著名安全策略,是瀏覽器最核心、基本的安全功能,它限制了一個源(origin)中加載文本或者腳本與來自其他源(origin)中資源的交互方式
,所謂的同源就是指協(xié)議、域名、端口相同。
只要協(xié)議、域名、端口有任何一個不同,都被當(dāng)作是不同的域,之間的請求就是跨域操作。
協(xié)議?域名?端口?
協(xié)議:網(wǎng)絡(luò)協(xié)議遍及OSI通信模型(OSI七層模型,常用協(xié)議有TCP/IP、HTTP、FTP協(xié)議等)
域名:Domain Name,網(wǎng)域,是由一串用點分隔的名字組成的Internet上某一臺計算機或計算機組的名稱,用于在數(shù)據(jù)傳輸時標識計算機的電子方位(有時也指地理位置)
端口:是設(shè)備與外界通訊交流的出口,分為物理端口和虛擬端口(常見的如80端口)
了解概念后我們知道跨域請求就是web瀏覽器自身不允許在域名、協(xié)議、端口等都不相同的情況下進行頁面請求方為,因此作為前端developer在項目開發(fā)時是需要解決此類問題的!
為什么要有這種限制?非同源請求頁面會怎么樣?
設(shè)想這樣一個情景:A網(wǎng)站是一家銀行,用戶登錄以后,又去瀏覽其他的網(wǎng)站B,如果網(wǎng)站B可以讀取A網(wǎng)站的Cookie,會發(fā)生什么問題?
顯然,如果Cookie包含隱私(比如存款總額),這些信息就會泄露,更可怕的是,Cookie往往用來保存用戶的登錄狀態(tài),如果用戶沒有退出登錄,其他網(wǎng)站就可以冒用戶,為所欲為。因為瀏覽器同時還規(guī)定,提交表單不受同源策略的限制。
非同源限制范圍
Cookie、LocalStorage和IndexDB無法獲取
DOM無法獲得
AJAX請求不能發(fā)送
跨域請求解決方案
1. jsonp:(JSON with Padding是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題)
原理:網(wǎng)頁客戶端動態(tài)添加
...