HTTP: запросы, ответы, коды и заголовки
Зачем:Вы увидите, как браузер просит страницу и что отвечает сервер. После урока вы читаете запрос и ответ в инструментах разработчика, отличаете 200, 301, 404 и 500 и понимаете, что делают основные заголовки.
25 минут
Озвучено синтезом речи (Qwen3-TTS), голос не принадлежит человеку.
HTTP — протокол, по которому браузер отправляет запрос, а сервер отвечает кодом состояния (200, 301, 404, 500), заголовками и телом.
Разговор по правилам
Когда браузер знает адрес сервера (в прошлых уроках мы разобрались, как), он устанавливает соединение и произносит первую фразу. Язык, на котором идёт разговор, называется HTTP (HyperText Transfer Protocol, протокол передачи гипертекста). Он очень прост по замыслу: клиент просит, сервер отвечает. Всегда в таком порядке: сервер сам ничего не присылает, пока его не спросили. И сервер не помнит, о чём вы говорили минуту назад: каждый запрос для него новый (программисты называют это отсутствием состояния).
В первых версиях HTTP был текстом, который можно прочитать глазами. Поэтому мы можем увидеть его целиком.
Запрос
Вот запрос, который отправляет браузер, когда вы открываете страницу услуг:
GET /uslugi/ HTTP/1.1
Host: www.example.ru
Accept: text/html
Accept-Language: ru
User-Agent: Mozilla/5.0 … Первая строка говорит, что именно просят: метод (GET, «дай»), путь (/uslugi/) и версию протокола. Дальше идут заголовки: пары «имя: значение», которые сообщают подробности. Host называет сайт, который нужен: к одному серверу могут быть привязаны сотни сайтов, и без этого заголовка он не поймёт, чей нужен. Accept-Language сообщает, какой язык вы предпочитаете. User-Agent рассказывает, что за программа просит.
Основных методов два. GET просит что-то получить, и именно так открываются страницы и картинки. POST отправляет что-то серверу, например данные формы. Есть и другие (PUT, DELETE, HEAD), с ними мы встретимся в части про сервер.
Если запрос что-то отправляет, после заголовков идёт пустая строка и тело: сами данные.
Ответ
Сервер отвечает по такому же шаблону:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 5120
Cache-Control: max-age=3600
<!doctype html>
<html lang="ru"> … Первая строка: версия, код состояния и его краткое название. Потом заголовки. Потом пустая строка и тело: сама страница, картинка или что просили. Именно тело браузер и рисует.
Попробуйте сами: выберите метод и адрес, и «сервер» маленького сайта ответит.
GET /uslugi HTTP/1.1 Host: www.example.ru Accept: text/html Accept-Language: ru User-Agent: Mozilla/5.0 …
HTTP/1.1 301 Moved Permanently
Location: /uslugi/
Content-Length: 0
Переадресация. Страница переехала навсегда. Новый адрес в заголовке Location, и браузер сам пойдёт по нему.
Проверьте себя: из чего состоит HTTP-ответ?
Из строки состояния (версия, код, пояснение), заголовков, пустой строки и тела.
Коды состояния
Код в первой строке ответа самое важное: он говорит, получилось ли. Цифры сгруппированы по первой:
- 2xx: успех.
200 OK: всё хорошо, вот страница. - 3xx: переадресация. Ищите в другом месте.
301 Moved Permanently: страница переехала навсегда, новый адрес в заголовкеLocation.302 Found: переехала временно.304 Not Modified: с прошлого раза ничего не изменилось, берите свою копию из памяти. - 4xx: ошибка запроса. Вы попросили что-то не то.
404 Not Found: страницы нет.403 Forbidden: вам туда нельзя.405 Method Not Allowed: так к этому адресу обращаться нельзя.410 Gone: страница была и намеренно удалена.429 Too Many Requests: вы спрашиваете слишком часто. - 5xx: ошибка сервера. Сломалось у них, а не у вас.
500 Internal Server Error: что-то пошло не так.502,503,504: сервер недоступен, перегружен или не дождался ответа от другого.
Запоминать все не нужно. Достаточно помнить группы: двойка хорошо, тройка идите туда, четвёрка ваша ошибка, пятёрка наша ошибка.
Проверьте себя: код 503 это ошибка запроса или сервера?
Сервера: он недоступен или перегружен. Группа 5xx это всегда «сломалось на стороне сервера».
Заголовки, которые стоит знать
Заголовков много, и их полный список огромен. Вот те, что пригодятся в первую очередь:
Content-Type: что в теле ответа (text/html,image/png,application/json) и в какой кодировке.Location: куда переехала страница, при кодах 301 и 302.Cache-Control: как долго можно хранить ответ в памяти, чтобы не просить его снова. Это ускоряет повторные посещения.Content-Encoding: сжат ли ответ (gzip или br). Сжатый ответ весит в разы меньше.Set-CookieиCookie: так сайт запоминает вас между запросами, например что вы вошли в аккаунт.Accept-Language: какой язык вы предпочитаете. Сайт на нескольких языках может выбрать нужный по нему.
Все эти заголовки можно посмотреть самому. Откройте инструменты разработчика (F12), вкладку «Сеть», обновите страницу и щёлкните по любому запросу: вы увидите ровно то, о чём шла речь, с настоящими значениями.
Версии HTTP
В течение жизни протокол обновлялся, но смысл остался прежним: «запрос, ответ, коды, заголовки». HTTP/1.1 (1997) был текстовым и открывал по нескольку соединений. HTTP/2 (2015) стал двоичным и позволяет вести много запросов по одному соединению. HTTP/3 (2022) заменил TCP на новый транспорт QUIC, который работает поверх UDP и быстрее восстанавливается после потерь. Страницы от этого не меняются: для автора сайта разницы нет, браузер и сервер договорятся о версии сами. А общие правила записаны в документе RFC 9110, который указан в источниках.
Практика
Вы в эпохе 2010 года. Ваш сайт перестроили, и адреса разделов поменялись. Если просто выкинуть старые адреса, все ссылки на них (из поиска, из соцсетей, из чужих писем) приведут на 404. Чтобы этого не случилось, делают перенаправление: старый адрес отвечает кодом 301 и новым адресом в заголовке Location.
Заполните карту переездов: для каждого раздела вашего проекта старый адрес, новый адрес и код 301. Разделы подставлены из брифа. Потом допишите страницу 404: объясните, что такой страницы нет, и поставьте ссылку на раздел, который ведёт к главному действию вашего сайта. Человек, попавший на 404, не должен остаться в тупике.
Что было не так с 2010 годом
Многие сайты тогда отвечали на несуществующую страницу кодом 200 и текстом «ничего не найдено»: поисковики принимали такие страницы за настоящие. Для человека это незаметно, а для машины это ложь. Хорошая страница 404 говорит правду и коду, и тексту, и человеку, и машине.
Практика
Готовлю вашу страницу…
Тест
Вопрос 1 из 7
Карточки
Эти карточки попадут в повторение, когда вы завершите урок.
Что такое HTTP?
Ответ
Протокол «запрос и ответ»: браузер просит страницу, сервер отвечает. Первым всегда говорит клиент.
Из чего состоит HTTP-запрос и ответ?
Ответ
Первая строка (метод и путь; код и пояснение), заголовки, пустая строка, тело.
Что значат группы кодов 2xx, 3xx, 4xx, 5xx?
Ответ
2xx: успех. 3xx: переадресация (301 навсегда, 302 временно). 4xx: ошибка в запросе (404 нет страницы, 403 нельзя). 5xx: ошибка сервера.
Назовите важные заголовки и что они делают
Ответ
Host: чей сайт. Content-Type: что в теле. Location: куда переехала страница. Cache-Control: как долго хранить. Accept-Language: язык.
Какой должна быть страница 404?
Ответ
С кодом 404 (не 200), с понятным текстом и ссылкой на главное: поиск, главную или нужное действие.
Источники
- Обзор HTTP (MDN) CC BY-SA, по-русски
- HTTP response status codes (MDN) CC BY-SA, по-английски
- HTTP headers (MDN) CC BY-SA, по-английски
- RFC 9110: HTTP Semantics только ссылка, по-английски
- HTTP (Википедия) CC BY-SA, по-русски
Видео
Что такое HTTP и HTTPS за 9 минут (Listen IT)
Видео загрузится с youtube-nocookie.com только после нажатия.
Дальше
Теперь вы знаете: HTTP: запрос и ответ, коды состояния и заголовки HTTP.