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