У меня настроена ферма серверов в IIS 8.5. Когда я проверяю заголовок HTTP_X_FORWARDED_FOR
в моем коде приложения, он дает мне правильный IP-адрес, но содержит двоеточие и номер порта.
Например,
HTTP_X_FORWARDED_FOR 127.0.0.1:64031
Я знаю, что HTTP_X_FORWARDED_FOR
может содержать список IP-адресов, разделенных запятыми, но я никогда не слышал, чтобы он содержал номера портов.
I ' Я не настроил явно 64031
как номер порта где-нибудь в моей настройке. Кроме того, кажется, что номер меняется случайным образом, что наводит меня на мысль, что это какой-то внутренний номер порта, выбранный IIS для связи между «внешним» прокси-сервером веб-фермы и внутренним физическим веб-сайтом.
Я не видел, как это задокументировано где-нибудь в сети. Это стандартное поведение? Это Microsoft Magic? Это что-то особенное для моей установки? Что именно означает этот номер порта?
Одна возможность заключается в том, что IIS реализует RFC 7239 , RFC, который , наконец, ратифицировал / создал HTTP-заголовок Forwarded
, чтобы заменить X-Forwarded-For
(и X-Forwarded-Proto
, и т. Д. ).
Я говорю это, потому что RFC 7239, раздел 5.3 определяет формат пересылаемых данных хоста; этот раздел, в свою очередь, направляет читателя к RFC 7230, раздел 5.4 , который определяет синтаксис / формат заголовка Host
. И что примечательно в синтаксисе ABNF для Host
:
Host = uri-host [ ":" port ] ;
Обратите внимание на дополнительный синтаксис для номера порта? В нем говорится, что номер порта разрешен , хотя, как вы правильно заметили, это очень необычно.
Так что это может быть не совсем «стандартным» поведением, но согласно RFC, это законно поведение. Может, сейчас это что-то конкретное для Microsoft? Но в приведенных выше RFC я впервые увидел упоминание формата заголовка X-Forwarded-For
(косвенно через формат заголовка Forwarded
), имеющего порт номер, а также IP-адрес.
Надеюсь, это поможет!