带有 ARR 的 IIS 服务器场:为什么 HTTP_X_FORWARDED_FOR 有一个端口号?

带有 ARR 的 IIS 服务器场:为什么 HTTP_X_FORWARDED_FOR 有一个端口号?

我在 IIS 8.5 中设置了一个服务器场。当我检查HTTP_X_FORWARDED_FOR应用程序代码中的标头时,它给出了正确的 IP 地址,但其中包含冒号和端口号。

例如

HTTP_X_FORWARDED_FOR    127.0.0.1:64031

我知道它HTTP_X_FORWARDED_FOR可以包含以逗号分隔的 IP 列表,但我从未听说过它包含端口号。

我没有明确配置64031为端口号任何地方在我的设置中。此外,该数字似乎随机变化,这使我相信它是 IIS 选择的某种内部端口号,用于在 Web 场“前端”代理和后端物理网站之间进行通信。

我在网上没有看到任何关于此内容的记录。这是标准行为吗?是 Microsoft Magic 吗?这是我的设置特有的吗?该端口号到底是什么意思?

答案1

可能性IIS 正在实施 RFC 7239,该 RFC最后批准/创建了ForwardedHTTP 标头,以替换X-Forwarded-For(和X-Forwarded-ProtoETC) 功能。

我这样说是因为RFC 7239,第 5.3 节定义转发主机数据的格式;该部分又引导读者RFC 7230,第 5.4 节,它定义了标头的语法/格式Host。值得注意的是 的 ABNF 语法Host

Host = uri-host [ ":" port ] ;

注意到端口号的可选语法了吗?它表示端口号是允许,尽管正如您正确指出的那样,这种情况非常罕见。

因此,这可能不完全是“标准”行为,但根据 RFC,这是合法的行为。也许这是目前 Microsoft 特有的?但上述 RFC 是我第一次看到提到标头格式X-Forwarded-For(间接通过标头格式Forwarded)的地方,该格式包含端口号和 IP 地址。

希望这可以帮助!

相关内容