2014-01-21 3 views
0

У меня есть рубиновый сервер на базе TCPSocket (не HTTP).Ruby TCPSocket Server - могу ли я указать, на каком хосте клиент подключался?

У меня есть 2 разных домена, оба указывают на A-Record на мои серверы. IP-адрес (тот же). Таким образом, клиенты подключаются к одному из этих доменов. Можно ли указать, к какой домену подключался клиент?

Я видел, что это возможно в других протоколах, но я не уверен, что это основано на добавленных вручную заголовках или действительно извлечено из основного соединения tcp/ip. Например. в PHP есть $_SERVER["HTTP_HOST"], который показывает, в какой домен был подключен клиент.

ответ

1

На уровне сокета TCP единственное, что известно, это IP-адреса источника и назначения (и порты) соединения. Как IP-адрес был разрешен через DNS, на этом уровне невозможно узнать. Несмотря на то, что HTTP работает поверх TCP, серверы HTTP должны смотреть HTTP-заголовки от клиента, чтобы узнать, к какому домену они обращаются. (Вот как заполняется значение HTTP_HOST.)

Одним из возможных решений является настройка вашего сервера на наличие дополнительного IP-адреса. Это может быть назначение дополнительного IP-адреса для сетевого адаптера или добавление дополнительного сетевого адаптера. Затем каждый домен использует другой IP-адрес. В противном случае это невозможно, и вы можете рассмотреть свой протокол приложений поверх TCP для передачи этой информации.