Глава 22 · Веб-разработка с Python

HTTP: запросы, ответы, методы и коды состояния

Общий набор правил, по которым браузер и сервер обмениваются сообщениями.

HTTP (HyperText Transfer Protocol) — прикладной протокол обмена сообщениями между клиентом и сервером в вебе: он задаёт общий набор правил, по которым браузер и сервер обмениваются запросами и ответами. Каждое сообщение — запрос или ответ — состоит из похожих частей.

HTTP-запросHTTP-ответ
Метод: что нужно сделать (GET, POST…)Код состояния: как всё прошло (200, 404…)
Путь: какой ресурс нуженЗаголовки: метаданные ответа
Заголовки: метаданные запросаТело: содержимое — HTML, JSON, файл…
Тело: необязательные данные (например, форма)

Основные методы HTTP

МетодОбычный смысл
GETПолучить данные — открыть страницу, посмотреть список
POSTОтправить новые данные — добавить задачу, отправить форму
PUTПолностью заменить существующий ресурс
PATCHЧастично изменить существующий ресурс
DELETEУдалить ресурс

Это распространённые соглашения, а не физический закон: ни один из методов не заставляет сервер вести себя определённым образом — Flask выполнит любой код, какой вы напишете в обработчике, независимо от метода. Но следование этим соглашениям делает приложение понятным для других разработчиков и для инструментов вроде браузерного кеша. Не каждое приложение использует все пять методов — маленький сайт вполне может обойтись только GET и POST, как в разделе 22.5.

GET не «безопаснее» POST — и наоборот
GET и POST не отличаются по защите передаваемых данных: это определяет протокол (HTTP или HTTPS, раздел 22.10), а не метод. Разница в другом: по определению HTTP GET предназначен для получения данных и не должен вызывать побочные изменения на сервере — именно на этом основано поведение браузеров, кеширующих прокси и других инструментов, которые считают GET безопасным для повтора: обновление страницы или добавление в закладки не должно ничего менять. Поэтому удаление задачи через GET-ссылку — плохая идея (правильный вариант показывает раздел 22.35): случайное обновление страницы браузером не должно ничего удалять.

Коды состояния: как прошёл запрос

ДиапазонСмыслПримеры
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 и так далее.

Практика: классификация кодов состояния
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →