最近要求我鏈接後端接口,我還只是個小實習,啥都不會,複製粘貼一波後,看着代碼,非常迷惑,生產環境、測試環境啥的域名呢,最少應該也有兩個域名把,可從頭至尾我只看到了一個域名。what???求問了前輩,說用了代理,代理我懂,那不是解決跨域的嗎,咋跟這個問題有關嗎???接着前輩去忙別的事 ,留我匆忙百度中。html
先解釋一下跨域是什麼東西?
跨域是由瀏覽器同源策略引發的,全部的瀏覽器都使用這個策略,這是一種約定。同源是指域名、端口、協議相同,也就是說,頁面請求的接口地址,必須與頁面url地址處於同域上(域名、端口、協議相同)。這是爲了防止某域名下的接口被其餘域名下的網頁非法調用,是瀏覽器對JavaScript施加的安全限制。
什麼是域名、端口、協議?
這與是否是同臺電腦無關。
打開百度,網址:https://www.baidu.com/
http:// => 表示協議
baidu.com => 表示域名(這是如果www.baidu.com表示的是二級域名,查到的資料上進行域名劃分的時候,都不會加上www.)
還有端口號,默認的端口號不顯示,網站上通常都不會顯示端口號了,若是進行過本地開發你會發現網址是這樣的http://localhost:8080/#/
8080 => 表示的就是端口號後端
通俗來說,跨域就好似你去拿別人的東西,瀏覽器就好似看管者,一發現這種狀況就會阻止你,而後你什麼都拿不到,還背了「跨域」的罪名。跨域
講完跨域,就該進入正題了,爲何部署生產環境、測試環境的時候要用代理,那是由於咱們開發的時候,確定是在本地開發,有些靜態資源也放在本地電腦上,訪問這些資源,經過IP方式(127.0.0.1)或者localhost來訪問,但項目上線了呢,有測試環境、生產環境,這樣一算就有三個域名,調試的時候該怎麼辦,用哪一個域名。有些人的作法,是全局聲明三個域名,根據不一樣的環境,請求不一樣的域名,這樣一來,就須要後端協做,須要後端每次更新都要在三個域名上進行更新,操做繁瑣。有些人就用了採用代理的方法。瀏覽器
代理有正向代理和反向代理。安全
關於代理,能夠看看這篇文章跨域問題,如下是一些總結。服務器
正向代理是指一個位於客戶端和目標服務器(target server)之間的服務器,爲了從目標服務器取得內容,客戶端向代理髮送一個請求並指定目標(目標服務器),而後代理向目標服務器轉交請求並將得到的內容返回給客戶端。
正向代理數據請求過程:
瀏覽器 => 代理服務器 => 目標服務器 這是請求數據過程;
目標服務器 => 代理服務器 => 瀏覽器 這是數據返回過程。
就像大陸用戶訪問不了google.com網站,可是若是有代理(代理多是香港或是哪裏的某個服務器,這個服務器能夠訪問google.com),大陸用戶就能夠先訪問代理服務器,代理將請求發給google.com,代理服務器將獲得的數據再返回給大陸用戶。網絡
反向代理是指代理服務器來接受internet上的鏈接請求,而後轉給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端。
反向代理數據請求過程:
瀏覽器 =>(代理服務器 => 目標服務器) 這是請求數據過程;
(目標服務器 => 代理服務器) => 瀏覽器 這是數據返回過程。ide
從整個過程來看,正向、反向代理的區別在於代理服務器和目標服務器是否爲一體。測試
從使用方來看,正向代理是瀏覽器端進行配置的,與服務器端無關,甚至能夠對服務端隱藏;反向代理是服務器端配置的,對瀏覽器端是透明的。(關於本文問題,這個纔是重點)網站
綜上,用了代理後,所有的請求都會通過那個代理,因此不須要考慮域名啥的,後端也只須要一份代碼就能夠了。emmm 以上內容有不少本身的理解,如果有錯誤,歡迎指出~