【发布时间】: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