共用方式為


什麼是 Proxy?

Proxy 是位於用戶端(例如您的應用程式)與目的地伺服器(例如後端 API)之間的中繼伺服器。 當您的應用程式傳送要求時,Proxy 會先接收它。 然後,Proxy 可以將要求轉送至目標伺服器、修改、封鎖或直接傳回回應。

簡言之,Proxy 代表用戶端或伺服器來調解通訊。

Proxy 的運作方式

Proxy 會藉由接收連入要求並採取下列一或多個動作,在 HTTP 層級運作(或其他應用程式通訊協定):

  • 將要求轉送 至目標伺服器,然後將響應轉送回用戶端。
  • 轉送之前修改標頭、URL 或承載。
  • 在本地攔截並回應要求,無需聯絡目標伺服器。
  • 根據 規則或存取原則拒絕要求。

從客戶端的觀點來看,它只會將要求傳送至 URL。 Proxy 會在幕後處理其他所有專案。 此模式是客戶端到代理伺服器再到目標伺服器。

此模式引進了一層控件和抽象概念,可用來改善安全性、可觀察性、效能和可測試性。

Proxy 的類型

有不同類型的 Proxy。 每個角色都適合系統架構中的特定角色。

正向代理

正向 Proxy 位於 用戶端前面。 當您的應用程式提出要求時,它會通過 Proxy,以決定是否和如何轉送它。 正向代理通常用來:

  • 控制外部資源的存取。
  • 匿名用戶端流量。
  • 記錄傳出流量以進行監視。
  • 套用內容篩選或轉換。

反向代理

反向代理伺服器位於伺服器 前面。 用戶端不知道基礎後端基礎結構。 反向代理會接收連入要求,並將其轉送至後端伺服器之一。 反向 Proxy 通常用來:

  • 跨多個服務對流量進行負載平衡。
  • 提供快取的回應,以減少後端負載。
  • 終止 TLS/SSL 連線。
  • 從公用因特網隱藏內部服務詳細數據。

透明代理

透明代理會在不需要用戶端明確設定使用它的情況下攔截流量。 此類型用於公司或因特網服務提供者環境中,以強制執行原則或監視使用方式。

為什麼 Proxy 對應用程式開發人員很重要

基礎設施或網路小組通常會管理代理伺服器。 不過,Proxy 會直接影響應用程式行為,特別是在開發和測試環境中。 以下是一些實際的方式,它們會影響你的日常工作。

偵錯和可觀察性

Proxy 可以擷取和檢查 HTTP 流量。 這類工具如 Dev Proxy、Fiddler、Proxyman、Charles Proxy 或 mitmproxy 可作為本地的正向代理服務。 您可以通過這些工具運行您的應用程式,以分析請求和回應、找出錯誤,並驗證標頭或身份驗證令牌。

API 閘道和路由

在許多生產系統中,應用程式的後端流量會透過 API 閘道或反向 Proxy 路由傳送,例如 NGINX,或 Azure API 管理等雲端原生服務。 這些 Proxy 會處理路由、驗證、速率限制等等。

當您設計 API 或建置分散式服務時,您必須瞭解 Proxy 如何影響標頭(例如 X-Forwarded-For)、逾時和要求大小限制。

CORS 和本機開發

在本機開發期間,特別是在 Web 應用程式中,當您從瀏覽器呼叫 API 時,可能會遇到跨原始來源資源分享 (CORS) 限制。 開發代理可以將您的請求轉發到目標 API,同時重寫標頭以繞過 CORS 限制。 重寫 CORS 要求的開發人員工具常見範例,包括 Express 或 ASP.NET Core 等架構中的 vitewebpack-dev-server或自定義 Proxy 中間件。

服務虛擬化和測試

Proxy 可以模擬後端 API。 在實際服務無法使用、不穩定或使用成本昂貴的情況下進行測試時,這項功能就會很有用。 藉由攔截和模擬回應,您可以在不同的案例下測試應用程式行為,例如逾時、錯誤或格式不正確的數據。

Dev Proxy代理或自定義代理實作之類的工具通常被用於整合測試和端對端測試。

驗證和安全性

Proxy 通常是保護應用程式時的第一道防線。 他們可以強制執行訪問控制、插入驗證標頭,或終止 TLS/SSL 連線。 身為開發人員,務必要了解應用程式在代理伺服器後方的行為,以及如何存取包含驗證或身分識別資訊的標頭。

常見的標頭和代理伺服器考慮因素

當要求通過 Proxy 時,會新增或修改特定標頭,以保留重要的元數據。 例如:

  • X-Forwarded-For:指出用戶端的原始IP位址。
  • X-Forwarded-Proto:表示原始通訊協定(HTTP 或 HTTPS)。
  • X-Forwarded-Host:表示用戶端所要求的原始主機。

當您的應用程式在反向 Proxy 後方執行時,請確定您的架構或平臺已設定為信任並正確解譯這些標頭。

開發代理作為開發和測試的正向代理

Dev Proxy 是一種前置代理伺服器,可用來攔截和修改應用程式發出的對任何目標伺服器的要求。 透過開發代理,您可以:

  • 查看您的應用程式如何回應 API 錯誤。
  • 確認您的應用程式如何處理 API 速率限制。
  • 查看您的應用程式如何處理緩慢的 API。
  • 快速建立模擬 API,而無需撰寫一行代碼。
  • 透過上下文指引改善您應用程式的 API 使用方式。

後續步驟