Почему 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-адреса является хорошей практикой в целом (балансировка нагрузки, кэширование серверов, безопасность, внутренние микросервисы только для сетевых подключений и т. Д.), Но, судя по вашей истории, это не рабочий сервер, а какое-то внутреннее приложение локальной сети.