HTTP協議探究(二):代理、網關和隧道


一 復習與目標

1 復習

  • 緩存目的:減輕服務器壓力,不重復請求相同的內容
  • 緩存位置:瀏覽器或中間代理
  • 相關狀態碼:200或403
  • 相關首部:
    • etag和since-none-match、last-modified和if-modified-since
    • cache-control:
      • private public
      • max-age s-maxage
      • must-revalidate proxy-revalidate
  • 緩存的處理流程(中間代理和瀏覽器)

2 目標

  • 緩存:代理服務器或者瀏覽器本地磁盤內保存的資源副本。
  • 緩存服務器是代理服務器的一種。
  • 與HTTP協作的Web服務器的角色:代理 網關 隧道。

二 概述

1 代理

代理是一種有轉發功能的應用程序,它扮演了位於服務器和客戶端“中間人”的角色,接收由客戶端發送的請求並轉發給服務器,同時也接收服務器返回的響應並轉發給客戶端。(相同協議,如:HTTP,版本可以不同)

2 網關

網關是轉發其他服務器通信數據的服務器,接收從客戶端發送來的請求時,它就像自己擁有資源的源服務器一樣對請求進行處理。有時客戶端可能都不會察覺,自己的通信目標是一個網關。(不同協議,如:客戶端 --HTTP---> 網關 --POP---> 郵箱服務器)

3 隧道

隧道是在相隔甚遠的客戶端和服務器兩者之間進行中轉,並保持雙方通信連接的應用程序。(HTTP應用程序發送非HTTP的流量)

注:上面的描述還是很抽象,后面講解完就清楚了。

三 代理

1 代理的作用

  • 過濾器:過濾掉某些IP的訪問
  • 文檔訪問控制:限制某些文檔的訪問
  • 安全防火牆:阻止SQL注入、阻止OS注入等(Nginx + lua)
  • Web緩存:響應存入本地,不需要重復獲取。
  • 反向代理:接收真實請求,轉發給內部網絡上的服務器。
  • 負載均衡:根據網絡流量狀況把請求導向給特定的服務器。
  • 轉碼器:修改內容的主體格式,如:傳輸gif時,轉換成jpeg。
  • 匿名者:刪除身份特征(如:cookie、Ip),從而提供高度私密性。

2 代理主要內容

(1)代理服務器部署

  • 正向代理(出口代理):客戶端 -> 內網 -> 代理 -> 外網 -> 服務器,如:VPN
  • 反向代理(入口代理):客戶端 -> 外網 -> 代理 -> 內網 -> 服務器,如:防火牆
  • 網絡交換代理:客戶端 -> 外網 -> 代理 -> 外網 -> 服務器,如:緩存服務器

(2)層次結構

  • 多級代理,如:客戶端 -> 代理1 -> 代理2 -> 代理3 -> 服務器

(3)請求如何到達代理?

  • 客戶端配置(如:科學上網)
  • 修改網絡:攔截代理
  • DNS修改:域名 -> 服務器IP 改為 域名 -> 代理IP ->服務器IP
  • Web服務器修改:響應重定向命令,即:客戶端 -> 服務器 --305-> 客戶端 -> 代理

3 追蹤報文:via首部

  • via格式:(協議名) (協議版本) 節點名 (節點注釋),括號內為可選項
  • 節點名:處於隱私的原因,可被隱藏,修改為假名替換

四 網關

1 常見的網關

  • 協議網關:如客戶端 --HTTP--> 網關 --FTP--> ftp服務器
  • 資源網關:CGI(通用網關接口)

2 協議網關

(1)HTTP/*網關:HTTP ->其他協議的網關

注:常見的有HTTP/TCP,即外部使用Rest API,內部使用RPC(可為TCP)

(2)HTTPS/HTTP網關:HTTPS->HTTP的網關

  • 外網使用HTTPS保證安全,內部使用HTTP保證高效。

3 資源網關:CGI

  • CGI是一個標准接口集,Web服務器用它來裝載程序以響應特定URL的HTTP請求,並收集程序的輸出數據,將其放在HTTP響應中回送。
  • 起初CGI為每個請求建立一個進程,處理完成后銷毀,后面這個開銷太大,出現了快速CGI。
  • 快速CGI啟動一個守護進程,並且使用開銷更小的線程來代替進程去處理請求。

五 隧道

1 概述

  • 隧道使得HTTP應用程序可以發送非HTTP流量
  • 用於穿透只允許Web流量通過的防火牆

2 建立連接:參考RFC2817

# 請求報文
CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80

# 響應報文
HTTP1.1 200 Connection Established

3 SSL隧道

  • 代理沒有實際服務器的私鑰(到時講解SSL就知道了),無法建立SSL/TLS連接
  • 所以代理不再作為中間人,即不再改寫請求內容,而是將數據原樣傳輸給下一層代理(這也說明了SSL能夠防止報文被篡改)。

參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM