HTTP/HTTPS: методы, статусы, заголовки, HTTP/2 и HTTP/3
↑ 1.1 Как работает веб и браузер · ← Предыдущая · → Следующая
Зачем это на собесе
HTTP — язык общения фронта и бэка; вопросы про методы, идемпотентность, коды и кэширование задают всем.
Объяснение
Запрос: метод + URL + заголовки + тело. Ответ: код статуса + заголовки + тело.
| Метод | Назначение | Идемпотентен | Безопасен |
|---|---|---|---|
| GET | получить | да | да |
| POST | создать/выполнить действие | нет | нет |
| PUT | заменить | да | нет |
| PATCH | изменить часть | нет (обычно) | нет |
| DELETE | удалить | да | нет |
| OPTIONS | что разрешено (CORS preflight) | да | да |
| Классы кодов | Примеры |
|---|---|
| 2xx | 200 OK, 201 Created, 204 No Content |
| 3xx | 301/308 постоянный, 302/307 временный, 304 Not Modified |
| 4xx | 400, 401 (не аутентифицирован), 403 (нет прав), 404, 409, 422, 429 |
| 5xx | 500, 502, 503, 504 |
Важные заголовки: Content-Type, Accept, Authorization, Cache-Control, ETag/If-None-Match, Set-Cookie/Cookie, Origin, Content-Security-Policy, Location.
Версии протокола:
| Версия | Особенности |
|---|---|
| HTTP/1.1 | текстовый, keep-alive, до ~6 соединений на домен, head-of-line blocking |
| HTTP/2 | бинарный, мультиплексирование, сжатие заголовков (HPACK), server push (почти не используется) |
| HTTP/3 | QUIC поверх UDP, нет HOL-blocking транспорта, быстрая установка |
HTTPS = HTTP поверх TLS: шифрование, целостность, аутентификация сервера.
const res = await fetch("/api/orders", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(order) });
if (!res.ok) throw new Error(`HTTP ${res.status}`); // fetch не бросает исключение на 4xx/5xxНюансы и подводные камни
fetchотклоняется только при сетевой ошибке; статусы 4xx/5xx нужно проверять вручную.- 401 и 403 путают: 401 — «кто вы?», 403 — «вам нельзя».
- Кэширование GET-запросов: не кладите чувствительные данные в URL.
- При HTTP/2 «спрайты» и склейка файлов уже не нужны в прежнем виде.
301кэшируется браузером надолго.
Практика
- Посмотрите заголовки запроса и ответа для 3 сайтов в DevTools.
- Отправьте POST через
fetchи обработайте 400/500. - Проверьте условный запрос с ETag: 304 в Network.
Вопросы с ответами
Чем PUT отличается от PATCH?
PUT заменяет ресурс целиком, PATCH меняет часть.
Что такое идемпотентность?
Повтор запроса даёт то же состояние, что и одиночный.
В чём выигрыш HTTP/2?
Мультиплексирование запросов в одном соединении и сжатие заголовков.