没有端口的HTTP X转发的主机行为

问题描述 投票:1回答:1

我发现在端口的情况下X-Forwarded-Host HTTP标头的定义不是很好。也许这就是为什么各种实现在此标头方面表现不同的原因。通常,此标头可以包含一个端口,例如b.com:123很简单。但是,如果NOT包含端口并且服务器在非默认端口上运行该怎么办?经过少量研究,我发现某些实现引入了“非官方的” X-Forwarded-Port标头。

现在,我正在考虑在服务器上实施,我的想法是,如果X-Forwarded-Host标头不带端口,则即使服务器正在运行,输出URL也应not也包含一个端口。与默认端口不同(如果X-Forwarded-Port标头不存在)。

X-Forwarded-Proto标头存在时情况变得更糟。

我创建了一个简单的表来描述我希望服务器如何运行,我的问题是:

您会实施相同的方法吗?宣告的行为对您而言直观吗?预先感谢。

| # |       Request        | X-F...-Proto | X-F...-Host | X-F...-Port |      Output URL      |
|:-:|:---------------------|:------------:|:-----------:|:-----------:|:---------------------|
| 1 | http://a.com:8080/x  |     -no-     |     -no-    |    -no-     | http://a.com:8080/x  |
| 2 | http://a.com:8080/x  |    https     |     -no-    |    -no-     | https://a.com:8080/x |
| 3 | http://a.com:8080/x  |     -no-     |    b.com    |    -no-     | http://b.com/x       |
| 4 | http://a.com:8080/x  |     -no-     |  b.com:123  |    -no-     | http://b.com:123/x   |
| 5 | http://a.com:8080/x  |     -no-     |     -no-    |     123     | http://a.com:123/x   |
| 6 | http://a.com:8080/x  |     -no-     |    b.com    |     123     | http://b.com:123/x   |
| 7 | http://a.com:8080/x  |     -no-     |  b.com:123  |    -no-     | http://b.com:123/x   |
| 8 | http://a.com:8080/x  |     -no-     |  b.com:123  |     456     | http://b.com:456/x   |
| 9 | http://a.com:8080/x  |    https     |    b.com    |    -no-     | https://b.com/x      |
|10 | http://a.com:8080/x  |    https     |    b.com    |     123     | https://b.com:123/x  |
|11 | xyzz://a.com:8080/x  |     -no-     |    b.com    |    -no-     | xyzz://b.com:8080/x  |

请注意我认为最棘手的#3和#9。

http webserver httpd.conf
1个回答
0
投票

由于到目前为止还没有答案,我请公司的一些人负责基础架构和Web服务器,他们同意提议的解决方案(表)是正确的。这样:

  • [X-Forwarded-Host,不带端口,表示使用协议默认设置((80,443)] >>
  • 我还将实现X-Forwarded-Port,因此即使它不是标准标头,该解决方案也是完整的-不会伤害任何人。

© www.soinside.com 2019 - 2024. All rights reserved.