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 扩展

另见