【问题标题】:HTTP X-Forwarded-Host Behavior Without Port没有端口的 HTTP X-Forwarded-Host 行为
【发布时间】:2020-08-09 06:37:52
【问题描述】:

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

现在,我正在考虑在服务器上实现,我的想法是,如果 X-Forwarded-Host 标头没有端口,那么输出 URL 也应该包含端口,即使服务器在与默认端口不同的端口上运行(如果 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】:

    由于目前还没有答案,我询问了我们公司的几个负责基础设施和 Web 服务器的人员,他们一致认为建议的解决方案(表格)是正确的。所以:

    • X-Forwarded-Host 没有端口意味着使用协议默认值 (80, 443)

    如果有人对代码 (Java) 感兴趣 = 这是一个 pull request (PR) 到 Gravitee.io API 管理平台,它修复了从使用应用程序默认端口 (8083) 到协议默认端口 (80, 443) 并添加了对X-Forwarded-Port 的支持。

    【讨论】:

      猜你喜欢
      • 2017-09-27
      • 2019-11-06
      • 2016-06-03
      • 2013-10-05
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 2016-08-14
      • 2020-06-22
      相关资源
      最近更新 更多