Я обнаружил, что 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, которые, на мой взгляд, самые хитрые.