转发

Forwarded 请求头包含可能由反向代理服务器(负载均衡器、CDN 等)添加的信息,这些信息在请求路径中涉及代理服务器时,否则会被更改或丢失。

例如,如果客户端通过 HTTP 代理(或负载均衡器)连接到 Web 服务器,服务器日志将仅包含代理的 IP 地址、主机地址和协议;此标头可用于识别原始请求的 IP 地址、主机和协议。此标头是可选的,并且可以在到达服务器路径上的任何代理服务器上添加、修改或删除。

此标头用于调试、统计和生成位置相关的內容。根据设计,它会公开隐私敏感信息,例如客户端的 IP 地址。因此,在部署此标头时必须牢记用户的隐私。

此标头的替代方案和事实上的标准版本是 X-Forwarded-ForX-Forwarded-HostX-Forwarded-Proto 标头。

标头类型 请求标头
禁止的标头名称

语法

来自单个代理的转发标头的语法如下所示。指令是key=value对,用分号分隔。

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

如果客户端和服务器之间有多个代理服务器,则每个代理服务器都可以指定自己的转发信息。这可以通过在标头块的末尾添加新的Forwarded标头来完成,或者通过将信息追加到最后一个Forwarded标头的末尾(用逗号分隔的列表)来完成。

指令

by 可选

请求进入代理服务器的接口。标识符可以是

  • 一个模糊的标识符(例如“隐藏”或“秘密”)。这应该被视为默认值。
  • 一个 IP 地址(v4 或 v6,可选地带端口,并且 ipv6 带引号并括在方括号中)
  • “未知”,当前面的实体未知时(并且您仍然希望指示已进行请求转发)
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.headers.Forwarded的规范数据。
检查此页面是否存在问题或为缺少的spec_url贡献内容至 mdn/browser-compat-data。还要确保规范包含在 w3c/browser-specs.

另请参阅