Kodokon kodokon.com

localhost, порты и "у меня всё работает"

Запусти сервер на собственном компьютере и пойми, почему его больше никто не видит.

7 мин · 3 вопросов

Открыть этот урок в Kodokon

Когда ты делаешь сайт, ты не станешь публиковать его в интернете после каждой правки. Ты запускаешь сервер на собственном компьютере и открываешь его в своём браузере. У этой машины, у твоей, есть зарезервированное имя: localhost, буквально "локальный узел". Есть у неё и зарезервированный IP-адрес, 127.0.0.1, который на любой машине мира всегда означает "я сам".

Но компьютер может держать несколько серверов одновременно. Как понять, к какому из них ты обращаешься? С помощью портов. Если IP-адрес - это адрес дома, то порт - номер квартиры: число от 1 до 65535, которое указывает программу, обязанную ответить. Некоторые номера общеприняты: порт 80 для http, 443 для https. При разработке часто берут 3000, 5173 или 8000. Порт пишется после имени через двоеточие: http://localhost:8000.

BASH
cd my-site
python3 -m http.server 8000

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
Настоящий веб-сервер одной командой. В Windows пиши py -m http.server 8000.

Оставь это окно терминала открытым: пока команда работает, сервер отвечает. Теперь открой в браузере http://localhost:8000, и ты увидишь файлы из папки my-site. Чтобы остановить сервер, вернись в терминал и нажми Ctrl + C.

Зачем эти сложности, если двойной клик по index.html тоже открывает страницу? Затем, что двойной клик открывает файл по адресу file:///C:/Users/..., а не по http://. А некоторые возможности веба наотрез отказываются работать вне протокола http: запросы к серверу, модули JavaScript, отдельные шрифты. Ты получишь непонятные ошибки, которые исчезнут как по волшебству, стоит тебе зайти через localhost.

BASH
lsof -i :8000

COMMAND   PID   USER   FD   TYPE  NODE NAME
python3  4821  sarah    3u  IPv4   TCP *:8000 (LISTEN)
Кто занимает порт 8000? В Windows: netstat -ano | findstr :8000

Проверка знаний

Убедись, что запомнил ключевые моменты этого урока.

  1. Что обозначает имя localhost?
    • Сервер твоего хостинг-провайдера
    • Твой собственный компьютер
    • Сеть Wi-Fi, к которой ты подключён
  2. Почему коллега не видит твой сайт, открывая http://localhost:3000?
    • Потому что у него неверный номер порта
    • Потому что localhost обозначает его собственную машину, а не твою
    • Потому что ему следовало использовать https
  3. Для чего нужен номер порта в http://localhost:8000?
    • Чтобы указать, какая программа на машине должна ответить
    • Чтобы шифровать соединение
    • Чтобы нумеровать страницы сайта