HTTP: запросы, ответы, методы и коды состояния
Общий набор правил, по которым браузер и сервер обмениваются сообщениями.
HTTP (HyperText Transfer Protocol) — прикладной протокол обмена сообщениями между клиентом и сервером в вебе: он задаёт общий набор правил, по которым браузер и сервер обмениваются запросами и ответами. Каждое сообщение — запрос или ответ — состоит из похожих частей.
| HTTP-запрос | HTTP-ответ |
|---|---|
| Метод: что нужно сделать (GET, POST…) | Код состояния: как всё прошло (200, 404…) |
| Путь: какой ресурс нужен | Заголовки: метаданные ответа |
| Заголовки: метаданные запроса | Тело: содержимое — HTML, JSON, файл… |
| Тело: необязательные данные (например, форма) |
Основные методы HTTP
| Метод | Обычный смысл |
|---|---|
| GET | Получить данные — открыть страницу, посмотреть список |
| POST | Отправить новые данные — добавить задачу, отправить форму |
| PUT | Полностью заменить существующий ресурс |
| PATCH | Частично изменить существующий ресурс |
| DELETE | Удалить ресурс |
Это распространённые соглашения, а не физический закон: ни один из методов не заставляет сервер вести себя определённым образом — Flask выполнит любой код, какой вы напишете в обработчике, независимо от метода. Но следование этим соглашениям делает приложение понятным для других разработчиков и для инструментов вроде браузерного кеша. Не каждое приложение использует все пять методов — маленький сайт вполне может обойтись только GET и POST, как в разделе 22.5.
Коды состояния: как прошёл запрос
| Диапазон | Смысл | Примеры |
|---|---|---|
| 2xx | Успех | 200 OK, 201 Created |
| 3xx | Перенаправление | 302 Found, 303 See Other — «ресурс нужно смотреть по другому адресу» |
| 4xx | Ошибка клиента | 400 Bad Request, 404 Not Found |
| 5xx | Ошибка сервера | 500 Internal Server Error |
Раздел 22.13 показывает код 303 в деле — как часть паттерна POST-Redirect-GET, а раздел 22.31 — коды 400 и 404 в обработке ошибок ввода.
Тело сообщения — не только HTML
Тело HTTP-ответа может содержать HTML-страницу, но так же легко — данные в формате JSON
(раздел 22.15), изображение, CSS-файл, JavaScript-файл или любой другой файл. Именно
заголовок Content-Type сообщает браузеру, как понимать тело
ответа — text/html, application/json,
image/png и так далее.