Я создаю чрезвычайно простое средство просмотра визуализации Vega: это один файловый модуль, обслуживающий базовую HTML-страницу, содержащую только графику Vega и HTML5 EventSource
обновлений . Пользователь (я) работает в оболочке Python через ssh, создает объект, представляющий средство просмотра, которое печатает свой IP-адрес и порт, чтобы пользователь мог вставить их в свой (мой) веб-браузер. Этот HTTP-сервер не обслуживает файлы и не принимает данные от клиентов, поэтому я не вижу никаких проблем с безопасностью.
Часть, в которой я не уверен, заключается в том, как установить (host, port)
так, чтобы мой веб-браузер мог найти HTTP-сервер, работающий на удаленном Python. Я экспериментировал весь день и не знаю, то ли я неправильно понимаю, что должно произойти, то ли серверы, которые я использую, изменили свои политики доступа.
Вот минимальный пример:
import SimpleHTTPServer
import SocketServer
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer((host, port), Handler)
print(httpd.server_address)
httpd.serve_forever()
Если я запускаю это локально и хочу гарантировать, что сторонние зрители не смогут получить к нему доступ, нужно ли установить host
на "127.0.0.1"
, потому что это означает, что клиент должен будет получить к нему доступ как 127.0 .0.1, что может произойти только локально? В этом случае port
может быть 0
для получения любого открытого порта.
Если я запускаю это удаленно, чтобы убедиться, что сторонние зрители могут получить к нему доступ, я должен установить host
на ""
или "0.0.0.0"
, потому что это означает, что клиент может получить к нему доступ как к любому адресу, который пробирается к сервер? В этом случае я, возможно, не смогу установить port
в 0
, потому что многие из этих портов могут быть заблокированы, или ОС в этом отношении умнее?
По сути, как должно работать управление доступом в SocketServer Python, предполагаемое?