Shanraq.org Shanraq.org
Как работает интернет: HTTP, запрос и ответ за 15 минут
IT

Go: с нуля до своего блога Урок 1 из 50

Как работает интернет: HTTP, запрос и ответ за 15 минут

Первый урок курса по Go. Что браузер спрашивает у сервера и что считается ответом: клиент и сервер, домен, IP и порт, метод и путь, заголовки и коды 200, 404, 500. Одна строка в терминале покажет вам настоящий HTTP-ответ раньше, чем вы о нём прочитаете. Школьная программа этого не даёт.

Зачем это нужно

Через урок вы напишете программу, которая отвечает браузеру. Чтобы её написать, надо знать ровно две вещи: о чём браузер спрашивает и что считается ответом.

Школьная информатика этого не даёт. Там сети проходят как «локальные и глобальные», и на почту с сайтами отведено около трёх часов. Нам нужно другое — и нужно немного.

Пятнадцать минут сейчас вместо сорока уроков догадок потом.

Сразу целиком

Не разбираясь ни в чём, откройте терминал и выполните одну строку:

curl -i https://shanraq.org

Терминал — это окно, где программе отдают команды текстом. На Windows он называется «Командная строка» или PowerShell, на macOS и Linux — «Терминал». Найдите по названию в поиске и откройте.

Вы увидите примерно это:

HTTP/2 200
content-type: text/html; charset=utf-8
date: Mon, 01 Sep 2026 09:00:00 GMT

<!doctype html>
<html lang="ru">
...

Всё. Вы только что руками сделали то, что браузер делает сотни раз в день.

Наверху — что сервер сообщил о себе. Внизу, после пустой строки, — сама страница. Пустая строка между ними не случайная: именно она отделяет одно от другого.

Если не получилось. curl не нашёлся — откройте любой сайт в браузере, нажмите F12, выберите вкладку «Сеть» (Network), обновите страницу и щёлкните по первой строке списка. Там то же самое, только нарисованное. В Safari F12 ничего не откроет: сначала Настройки → Дополнения → «Показывать меню „Разработка"», потом ⌥⌘I. Ответ пришёл, но с кодом 301 или 302 — это переадресация, и это нормально: добавьте к команде -L, и curl пойдёт следом.

Разбор

Клиент и сервер

Их двое. Один спрашивает, другой отвечает. Спрашивающего зовут клиентом, отвечающего — сервером.

Браузер — клиент. curl, который вы только что запустили, — тоже клиент. Сервер — программа на чужом компьютере, которая круглосуточно ждёт вопросов. Через сорок уроков сервером будет ваша программа.

Главное здесь: сервер не начинает разговор. Он ждёт.

Образ. Справочное окно на вокзале. За ним сидят весь день и ждут вопроса. Сами к вам никогда не подойдут — подойти надо вам.

Адрес: домен, IP и порт

У компьютера в сети есть номер — IP-адрес, вроде 104.21.0.15. Номера никто не помнит, поэтому придумали имена: shanraq.org. Имя переводится в номер по дороге, и этим занимается отдельная служба — DNS.

Образ. Телефонная книга. Вы помните имя человека, а не его номер; книга переводит одно в другое. DNS — та же книга, только для всего интернета.

Но номера мало. На одном компьютере работает много программ, и надо сказать, которой из них вопрос. Для этого есть порт — просто число. У веба два привычных: 80 для HTTP и 443 для HTTPS. В адресной строке их не пишут, потому что браузер подставляет сам.

Запомните так: IP — это дом, порт — квартира.

Запрос: метод, путь, заголовки

Вопрос клиента состоит из трёх частей.

Метод — что именно вы хотите сделать. Сейчас нужны два: GET — «дай посмотреть», и POST — «вот, прими». Переход по ссылке и ввод адреса — это GET. Отправка формы — обычно POST.

Образ. Два разных обращения в то же окно: «покажите расписание» и «примите заявление». Окно одно, а действия разные, и путать их нельзя.

Путь — что именно дать. В адресе https://shanraq.org/read/salem путь это /read/salem.

Заголовки — подробности о клиенте: на каком языке я хочу ответ, какой у меня браузер, есть ли у меня кука. Обычные строки вида «имя: значение».

Образ. Пометки на конверте: кому, от кого, каким классом, хрупкое ли. Само письмо внутри, а по конверту почта решает, как его нести.

Ответ: код, заголовки, тело

Ответ устроен так же, только сверху стоит код состояния — три цифры, которыми сервер говорит, как всё прошло.

Дальше заголовки сервера. Самый важный сейчас — content-type: он говорит клиенту, что именно ему прислали, страницу или картинку. Без него браузер не знает, показать текст или скачать файл.

Потом пустая строка. Потом тело — то, ради чего всё затевалось: HTML страницы, изображение, что угодно.

Образ. Письмо внутри конверта. Заголовки — это надписи снаружи, тело — то, что вы достаёте и читаете.

Три кода, которых пока хватит

  • 200 — всё хорошо, вот что вы просили.
  • 404 — такого пути у меня нет. Чаще всего адрес просто неверный, но бывает и наша вина: сломанная ссылка на самом сайте ведёт туда же.
  • 500 — я сломался. Вот это уже вина автора сервера, и в уроке про ошибки и логи мы научимся такое замечать.

Кодов больше сотни, но эти три покроют почти всё, что встретится вам в первый месяц.

Образ. Штамп на поданном заявлении. «Принято» — 200. «Такого дела у нас нет» — 404. «У нас пожар, приходите позже» — 500. Штамп ставят всегда, даже когда отказывают.

HTTP и HTTPS

HTTP — не программа и не файл. Это договор: в каком порядке писать метод, путь, заголовки и тело, чтобы две незнакомые программы поняли друг друга. Такие договоры называют протоколами.

Образ. Правила заполнения бланка. Не язык и не бумага, а договорённость: сначала фамилия, потом дата, подпись внизу. Заполните иначе — у вас не примут, хотя все слова понятные.

HTTPS — тот же самый договор, только по дороге всё зашифровано. Ровно поэтому в браузере замок. Для вашего кода разницы почти нет: писать вы будете HTTP, а шифрование добавится снаружи, в уроке про домен и HTTPS.

Карта урока

Карта урока: клиент, запрос, сервер, ответ

Скажите своими словами

Не подглядывая, ответьте вслух или на бумаге. Ответы — в конце урока.

  1. Почему сервер не может первым написать вашему браузеру?
  2. Что произойдёт, если сервер пришлёт правильную страницу, но с заголовком content-type: image/png?
  3. Чем 404 отличается от 500 — не формулировкой, а тем, кто виноват?

Задание

Обязательное. Выполните curl -i для двух любых сайтов. Выпишите для каждого код состояния и content-type. Всё.

По желанию.

  • Найдите адрес, который отдаёт 404. Проще всего дописать к знакомому сайту любую чепуху.
  • Найдите переадресацию — ответ с кодом, начинающимся на 3, и заголовком location: сервер говорит «я переехал, спроси вот там». Подсказка: curl -i http://shanraq.org, без буквы s. Какой именно код придёт — 301, 302, 307 или 308 — зависит от сервера; они различаются тем, навсегда ли переезд и сохраняется ли метод.

Куда это встанет в блоге

Ваш блог — это сервер. Каждая страница, которую откроет читатель, — один такой обмен: он прислал GET и путь, вы вернули 200 и HTML.

Дальше вы соберёте рабочее место, а потом напишете сервер, который отвечает кодом 200 и словом «Сәлем». В уроке про HTTP всерьёз мы вернёмся сюда же и разберём заголовки подробно.

Сразу о деньгах, чтобы не было сюрприза в конце. Весь курс — и язык, и база, и готовый блог — работает на вашей машине бесплатно. Если захотите, чтобы блог открывали другие, разместить сайт тоже можно бесплатно. Деньги понадобятся только на своё доменное имя: это единственный платный шаг за весь курс.

Ответы

Показать ответы
  1. Потому что сервер только ждёт. Он не знает ни адреса вашего компьютера, ни того, что вы существуете, пока вы не спросите первым. Разговор всегда начинает клиент.
  2. Браузер поверит заголовку, а не содержимому: он попробует показать страницу как картинку и покажет либо ошибку, либо мусор. content-type — это не подпись, а инструкция.
  3. При 404 ошибся читатель, а сервер отработал правильно. При 500 сервер сломался на правильном адресе, и виноват тот, кто его писал. Первое чинить не нужно, второе нужно.

Источники

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить задание

Сначала решите и запустите в VS Code — редактор покажет ошибку на месте. Готовое решение вставьте сюда. Проверяет модель: она укажет на ошибку, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.