我发现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。
由于到目前为止还没有答案,我询问了我们公司负责基础设施和网络服务器的一些人,他们同意建议的解决方案(表)是正确的。以便:
-
X-Forwarded-Host
无端口装置使用协议默认值(80, 443)
如果有人对代码(Java)感兴趣=这里是拉取请求(公关)至Gravitee.ioAPI 管理平台修复了从使用应用程序默认端口 (8083) 到协议默认端口 (80、443) 的行为,并添加了对X-Forwarded-Port
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)