我們通常認為網絡連接直接發生在客戶端和服務器之間。但實際上網絡請求從客戶端發出后,會經過層層關卡到達服務器。服務器收到請求后,返回的響應依舊會經過層層關卡返回給客戶端。本篇文章介紹了網絡請求和響應會經過哪些關卡,以及這些關卡的作用分別是什么?
下面是本文的提綱:
代理
位于客戶端和服務器之間的 HTTP 中間實體緩存
HTTP 的倉庫,使常用頁面的副本可以保存在離客戶端更近的地方網關
連接其他應用程序的特殊 Web 服務器隧道
對 HTTP 通信報文進行盲轉發的特殊代理Agent 代理
發起自動 HTTP 請求的半智能 Web 客戶端
1 - 代理
代理位于客戶端和服務器之間,接受所有客戶端的HTTP請求,并將這些請求轉發給服務器。對于用戶來說,這些應用程序就是一個代理,代表用戶訪問服務器。
1.1 代理服務器的部署
a. 出口代理
可以將代理固定在本地網絡的出口點,以便控制本地網絡與大型因特網之間的流量。可以在公司網絡中使用代理,提供針對公司外部惡意黑客的防火墻保護。b. 訪問(入口)代理
代理常被放在ISP(Internet Service Provider)訪問點上,用以處理來自客戶的聚合請求。ISP使用緩存代理來存儲常用文檔的副本,以提高用戶的下載速度,降低因特網帶寬耗費。
c. 反向代理
外部所有的請求都會發送給代理,代理轉發給某臺服務器。在這里,代理可以進行負載均衡,把請求分配給空閑或者處理能力強的機器,也可以進行統一安全性檢查。d. 網絡交換代理
通過緩存來減輕因特網節點的擁塞,并對流量進行監視。
2 - 緩存
Web緩存(Web cache)或代理緩存(proxy cache)是一種特殊HTTP代理服務器,可以將經過代理傳送的常用文檔復制保存下來。下一個請求同一文檔的客戶端就可以享受緩存的私有副本所提供的服務了。這樣做的目的是因為客戶端從附近的緩存下載文檔會比從遠程Web服務器下載快得多。
2.1 緩存處理請求的過程
Web緩存的基本工作原理大多很簡單,對一條HTTP GET報文的基本緩存處理過程包括以下7個步驟(如圖所所示):
- 接收——緩存從網絡中讀取抵達的請求報文
- 解析——緩存對報文進行解析,提取出URL和各種首部
- 査詢——緩存査看是否有本地副本可用,如果沒有,就獲取一份副本,并將其保存在本地
- 新鮮度檢測——緩存査看已緩存副本是否足夠新鮮,如果不是,就詢問服務器是否有任何更新
- 創建響應——緩存會用新的首部和已緩存的主體來構建一條響應報文
- 發送——緩存通過網絡將響應發回給客戶端
- 日志——緩存可選地創建一個日志文件條目來描述這個事務
3 - 網關
網關(gateway)是一種特殊的服務器,作為其他服務器的中間實體使用。通常用于將HTTP流量轉換為其他的協議。網關接受請求時就好像自己是資源端服務器一樣。客戶端可能并不知道自己正在與一個網關進行通信。
例如,一個HTTP/FTP網關會通過HTTP請求接受對FTP URI的請求,但通過FTP協議來獲取文檔。得到的文檔會被封裝成一條HTTP報文,發送給客戶端。
網關和代理的區別是,代理連接的是兩個或多個使用相同協議的應用程序,而網關連接的則是兩個或多個使用不同協議的端點。
3.1 網關的3個實例
下圖顯示了三個網關的示例:
- 在圖a中,網關收到了對FTP URL的HTTP請求。然后網關打開FTP連接,并向FTP服務器發布適當的命令。然后將文檔和正確的HTTP首部通過HTTP回送;
- 在圖b中,網關通過SSL收到了一條加密的Web請求,網關會對請求進行解密,然后向目標服務器轉發一條普通的HTTP請求??梢詫⑦@些安全加速器直接放在(通常處于同一場所的)Web服務器前面,以便為原始服務器提供髙性能的加密機制;
- 在圖c中,網關通過應用程序服務器網關API,將HTTP客戶端連接到服務器端的應用程序上去。在網上的電子商店購物,査看天氣預報,或者獲取股票報價時,訪問的就是應用程序服務器網關。這也是網關最常見的用途,客戶端無須關注服務器實現,只需要按照API或CGI發送規定格式的內容,就可以獲取相應的內容。
4 - 隧道
隧道(tunnel)是建立起來之后,就會在兩條連接之間對原始數據進行盲轉發的 HTTP 應用程序。HTTP 隧道通常用來在一條或多條 HTTP 連接上轉發非 HTTP 數據,轉發時不會窺探數據。HTTP 隧道的一種常見用途是通過 HTTP 連接承載加密的安全套接字層(SSL, Secure Sockets Layer)流量,這樣 SSL 流量就可以穿過只允許 Web 流量通過的防火墻了。
如圖所示,HTTP/SSL 隧道收到一條 HTTP 請求,要求建立一條到目的地址和端口的輸出連接,然后在 HTTP 信道上通過隧道傳輸加密的 SSL 流量,這樣就可以將其盲轉發到目的服務器上去了。
5 - Agent代理
用戶 Agent 代理(或者簡稱為 Agent 代理)是代表用戶發起 HTTP 請求的客戶端程序。所有發布 Web 請求的應用程序都是 HTTP Agent 代理。到目前為止,我們只提到過一種 HTTP Agent 代理:Web 瀏覽器,但用戶 Agent 代理還有很多其他類型,比如網絡爬蟲。
爬蟲屬于Web機器人,而得到最廣泛使用的Web機器人都是因特網搜索引擎。因特網搜索引擎可以幫助用戶找到世界范圍內涉及任意主題的文檔。
大家好,我是彬彬醬,目前在騰訊從事Web后端開發。
菜鳥必知的 http 知識專題整理了關于網絡的基礎知識,適合大家進行入門級學習,這個專題現包含下列文章:
菜鳥必知的 http 知識(一)—— TCP 握手協議
菜鳥必知的 http 知識(二)—— HTTP 協議特點
菜鳥必知的 http 知識(三)—— 請求和響應報文
菜鳥必知的 http 知識(四)—— HTTP 和 HTTPS
菜鳥必知的 http 知識(五)—— 新技術的出現
菜鳥必知的 http 知識(六)—— web的結構組件