HTTP / 1.1 開始允許一台伺服器可以建立多個網頁站點。例如:提供網頁寄存服務的公司可以用一台伺服器幫多個客戶服務,以每個客戶持有的域名運作各自的網站,這是利用虛擬主機的關係。
在網路上域名通過 DNS 來進行域名解析,關聯到 IP 地址再訪問目標網站。如果一台伺服器寄存了兩個域名,當收到請求的時候就要知道需要訪問哪個域名。
在一樣 IP 地址下,由於虛擬主機可以寄存不同主機名和域名的 URI,在發送請求時,必須在 host 首部內完整指定主機名稱與 URI。
HTTP 通訊,除了客戶端和伺服端外,還有一些用於通訊資料轉發的程式,例如:代理、閘道、隧道。他們可以將請求轉發給通訊線路上的下一站伺服器,並可以接收從那台伺服器發送的回應再轉發給客戶端。
代理
代理是處理轉發的一種程式,他算是伺服端與客戶端的中介站,接收客戶端的請求再轉發給伺服端,也接收伺服端的回應給客戶端。
閘道
轉發其他伺服器資料的伺服器,接收從客戶端發出的請求時,他就像擁有資料一樣對請求進行處理,有時候客戶端不會知道自己發出的對象是個閘道。
隧道
隧道是在隔很遠的客戶端和伺服器兩者的中間進行中轉,以保持通訊連接。
代理在接收請求後轉發給其他的伺服器,代理不會改變請求的 URI,會直接轉發給前方持有資源的伺服器,而真正持有資源的伺服器叫做來源伺服器,再從來源伺服器回傳回應,經過代理伺服器再到客戶端。
每次經過代理伺服器轉發請求或回應,會追加 Via header 訊息來標示經過的主機訊息。在通訊的過程中,可以串連多台代理伺服器,請求和回應會像鍊子一樣被連接起來。
什麼時候要使用代理伺服器?利用緩存減少網路頻寬的流量,針對特定網站的請求控制等等。
代理有兩種方式,分為是否使用緩存跟是否修改訊息:
閘道和代理非常相似,而閘道可以提供通訊線路上非 HTTP 的服務,利用閘道可以提供通訊的安全性,因此可以在客戶端與閘道之間進行加密,例如閘道連接資料庫使用 SQL 語法來查詢資料,另外在購物網站上做信用卡結算時,閘道可以和信用卡系統做連動。
隧道可以依照需求建立與其他伺服器的通訊線路,到時候可以用 SSL 加密進行通訊,隧道主要是能確保客戶端和伺服端進行安全的通訊,隧道不會去解析 HTTP 請求,也就是保持原本的請求中轉給伺服器,隧道會在雙方斷開連結的時候結束。
緩存是指代理伺服器和客戶端本地硬碟保存的資料副本,利用緩存可以減少對來源伺服器的訪問,也就節省了流量和時間。
緩存伺服器是代理伺服器的一種,歸類在緩存代理中,意思就是說當代理轉發從伺服器的回應時,代理伺服器會保存一份資料的複製。
緩存伺服器可以利用緩存避免多次從來源伺服器轉發資料,因此客戶端可就近從緩存伺服器取得資料,而來源伺服器也不用多次處理相同請求。
即使緩存伺服器裡面有緩存,也不能保證每次都會返回一樣的資料的請求,因為這關係到緩存資料的有效性。當來源伺服器上的資料更新,如果緩存還是一樣,那就會演變成回傳到舊資料。
即使有緩存,也會因為客戶端的要求、緩存等因素像來源伺服器確認資料的有效性,如果判斷緩存失效,就會再次向來源伺服器取得新資料。
緩存可以存在伺服器,也可以存在客戶端的瀏覽器,如果瀏覽器有緩存就不需要再跟伺服器請求相同的資料,可以直接在本地端讀取,再來當判定緩存過期之後,會再跟來源伺服器確認資料的有效性,但判斷失效,瀏覽器會在請求資料。
資料來源:《圖解 HTTP》 上野宣 人民郵電出版社
筆記純屬推廣及分享,如有侵權,請告知。
Please advise to remove immediately if any infringement caused.