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.
Карта урока
Скажите своими словами
Не подглядывая, ответьте вслух или на бумаге. Ответы — в конце урока.
- Почему сервер не может первым написать вашему браузеру?
- Что произойдёт, если сервер пришлёт правильную страницу, но с заголовком
content-type: image/png? - Чем 404 отличается от 500 — не формулировкой, а тем, кто виноват?
Задание
Обязательное. Выполните curl -i для двух любых сайтов. Выпишите для каждого код состояния и content-type. Всё.
По желанию.
- Найдите адрес, который отдаёт 404. Проще всего дописать к знакомому сайту любую чепуху.
- Найдите переадресацию — ответ с кодом, начинающимся на 3, и заголовком
location: сервер говорит «я переехал, спроси вот там». Подсказка:curl -i http://shanraq.org, без буквы s. Какой именно код придёт — 301, 302, 307 или 308 — зависит от сервера; они различаются тем, навсегда ли переезд и сохраняется ли метод.
Куда это встанет в блоге
Ваш блог — это сервер. Каждая страница, которую откроет читатель, — один такой обмен: он прислал GET и путь, вы вернули 200 и HTML.
Дальше вы соберёте рабочее место, а потом напишете сервер, который отвечает кодом 200 и словом «Сәлем». В уроке про HTTP всерьёз мы вернёмся сюда же и разберём заголовки подробно.
Сразу о деньгах, чтобы не было сюрприза в конце. Весь курс — и язык, и база, и готовый блог — работает на вашей машине бесплатно. Если захотите, чтобы блог открывали другие, разместить сайт тоже можно бесплатно. Деньги понадобятся только на своё доменное имя: это единственный платный шаг за весь курс.
Ответы
Показать ответы
- Потому что сервер только ждёт. Он не знает ни адреса вашего компьютера, ни того, что вы существуете, пока вы не спросите первым. Разговор всегда начинает клиент.
- Браузер поверит заголовку, а не содержимому: он попробует показать страницу как картинку и покажет либо ошибку, либо мусор.
content-type— это не подпись, а инструкция. - При 404 ошибся читатель, а сервер отработал правильно. При 500 сервер сломался на правильном адресе, и виноват тот, кто его писал. Первое чинить не нужно, второе нужно.
Источники
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.