Почему http-сервер хоста должен указывать IP-адрес, на котором он размещается?

Я размещаю http-сервер на Python, используя модуль BaseHTTPServer.

Я хочу понять, почему необходимо указывать IP-адрес, на котором вы размещаете http-сервер, например 127.0.0.1/192.168.0.1 или что-то еще. [может быть общей концепцией http-сервера, а не специфичной для Python]

Почему не может быть так, что любой, кто знает IP-адрес машины, может подключиться к http-серверу?

Я сталкиваюсь с проблемами в случае, когда мой http-сервер подключен к двум сетям одновременно, и я хочу обслуживать http-сервер в обеих сетях. И часто мой IP-адрес меняется на лету, когда я переключаюсь из режима горячей точки на компьютере http-сервера, чтобы подключиться к другому маршрутизатору Wi-Fi.

2 ответа

Решение

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

Другая причина заключается в том, что сервер профессионального уровня часто имеет несколько сетевых интерфейсов и несколько IP-адресов, и некоторым службам нужно только прослушивать некоторые адреса интерфейсов.

Надеемся, что есть специальные адреса:

  • localhost или 127.0.0.1 - это адрес обратной связи, доступный только с локальной машины. В настоящее время используется для тестирования локальных сервисов.
  • 0.0.0.0 (любой) - это специальный адрес, используемый для объявления о том, что вы хотите прослушивать все локальные интерфейсы. Я думаю, что это то, что вы хотите здесь.

Попробуйте запустить его на 0.0.0.0, он принимает подключения со всех интерфейсов. Явное указание IP-адреса является хорошей практикой в ​​целом (балансировка нагрузки, кэширование серверов, безопасность, внутренние микросервисы только для сетевых подключений и т. Д.), Но, судя по вашей истории, это не рабочий сервер, а какое-то внутреннее приложение локальной сети.

Другие вопросы по тегам