Forwarded 頭

HTTP Forwarded 請求頭包含可能由反向代理伺服器(負載均衡器、CDN 等)新增的資訊,這些資訊在請求路徑中涉及代理伺服器時可能會被更改或丟失。

例如,如果客戶端透過 HTTP 代理(或負載均衡器)連線到 Web 伺服器,伺服器日誌將只包含代理的 IP 地址、主機地址和協議;此頭可用於識別原始請求的 IP 地址、主機和協議。該頭是可選的,並且可以由到達伺服器路徑上的任何代理伺服器新增、修改或刪除。

此頭用於除錯、統計和生成與位置相關的內容。根據設計,它會暴露隱私敏感資訊,例如客戶端的 IP 地址。因此,在使用此頭時必須牢記使用者的隱私。

此頭的替代和事實標準版本是 X-Forwarded-ForX-Forwarded-HostX-Forwarded-Proto 頭。

頭型別 請求頭
禁止請求頭

語法

http
Forwarded: by=<identifier>;for=<identifier>;host=<host>;proto=<http|https>

指令是 key=value 對,以分號分隔。

如果客戶端和伺服器之間有多個代理伺服器,它們可以各自指定自己的轉發資訊。這可以透過在頭塊末尾新增一個新的 Forwarded 頭,或者透過將資訊附加到最後一個 Forwarded 頭的逗號分隔列表中來完成。

指令

by 可選

請求進入代理伺服器的介面。識別符號可以是

  • 模糊識別符號(例如“hidden”或“secret”)。這應被視為預設值。
  • IP 地址(v4 或 v6,可選帶埠,IPv6 需加引號並用方括號括起來)
  • "unknown" 當前一個實體未知時(並且您仍然希望表明請求已轉發)
for 可選

發起請求的客戶端以及代理鏈中的後續代理。識別符號具有與 by 指令相同的可能值。

host 可選

代理收到的 Host 請求頭欄位。

proto 可選

指示用於發出請求的協議(通常是“http”或“https”)。

示例

使用 Forwarded

http
Forwarded: for="_mdn"

# case insensitive
Forwarded: For="[2001:db8:cafe::17]:4711"

# separated by semicolon
Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43

# Values from multiple proxy servers can be appended using a comma
Forwarded: for=192.0.2.43, for=198.51.100.17

X-Forwarded-For 過渡到 Forwarded

如果您的應用程式、伺服器或代理支援標準化的 Forwarded 頭,則可以替換 X-Forwarded-For 頭。請注意,在 Forwarded 中,IPv6 地址被引號括起來並用方括號包圍(與 X-Forwarded-For 頭不同)。

http
X-Forwarded-For: 192.0.2.172
Forwarded: for=192.0.2.172

X-Forwarded-For: 192.0.2.43, 2001:db8:cafe::17
Forwarded: for=192.0.2.43, for="[2001:db8:cafe::17]"

規範

規範
轉發 HTTP 擴充套件

另見