October 20, 2025
HTTP-запросы
🔹 HTTP-запросы: структура, методы, коды состояния
1️⃣ Базовые понятия HTTP
- HTTP (HyperText Transfer Protocol) — протокол прикладного уровня для передачи гипертекста и доступа к ресурсам веба.
- Участники:
- Порт по умолчанию: 80 (HTTP), 443 (HTTPS).
- Спецификация: RFC 2616. Популярные версии: HTTP/1.1 и HTTP/2.
2️⃣ HTTP-сообщения
Типы:
- Запросы (Request) — от клиента к серверу для получения ресурса или выполнения действия.
- Ответы (Response) — от сервера клиенту, содержат результат обработки запроса.
Структура:
- Стартовая строка — метод, URL, версия протокола.
- HTTP-заголовки — метаданные запроса/ответа.
- Пустая строка — разделитель метаданных и тела.
- Тело сообщения (опционально) — данные запроса или документа.
3️⃣ Стартовая строка запроса
- Метод (GET, POST, PUT, DELETE и др.)
- URL (Scheme, Host, Port, Path, Query String)
- Версия протокола (HTTP/1.1, HTTP/2)
Пример:
GET /index.html HTTP/1.1
4️⃣ Методы HTTP
- GET — получить ресурс.
- POST — отправить данные на сервер.
- PUT — обновить ресурс.
- DELETE — удалить ресурс.
- HEAD, OPTIONS, PATCH — вспомогательные методы.
Примечание: Некоторые методы могут иметь тело запроса (POST, PUT), другие — нет (GET, DELETE).
5️⃣ URL-компоненты
- Scheme — протокол (http://, https://)
- Host — доменное имя или IP
- Port — номер порта (по умолчанию для http 80, https 443)
- Path — путь к ресурсу (например /index.html)
- Query String — параметры запроса (?param=value¶m2=value2)
Обязательные: Scheme + Host. Остальные опциональны.
7️⃣ HTTP-заголовки
Формат: Имя-Заголовок: Значение
Регистрозависимость: нет, но принято начинать каждое слово с заглавной буквы.
Категории:
- Общие — применяются ко всему сообщению.
- Запроса — уточняют информацию о запросе.
- Представления — указывают формат данных и кодировку, применяются с телом запроса.
8️⃣ Тело запроса
- Обязательное только для методов, которые отправляют данные (POST, PUT).
- Отсутствует у GET, DELETE, HEAD, OPTIONS.
9️⃣ HTTP-ответы
Структура: аналогична запросу — стартовая строка (status line), заголовки, тело.
Строка статуса
Коды состояния
- 1xx — информационные
- 2xx — успех (200 OK, 201 Created)
- 3xx — редирект
- 4xx — ошибка клиента (400 Bad Request, 404 Not Found)
- 5xx — ошибка сервера (500 Internal Server Error)
10️⃣ Заголовки ответа
11️⃣ Тело ответа
- Необязательное.
- Присутствует для большинства ответов (HTML, JSON, XML).
- Отсутствует для 201 Created, 204 No Content.
12️⃣ Безопасность: HTTP vs HTTPS
- HTTP — данные передаются в открытом виде.
- HTTPS — данные шифруются, используется порт 443, защищает учетные данные пользователей.
13️⃣ Практика: как отправить HTTP-запрос
Инструменты:
- Инструменты разработчика в браузере (F12 / Ctrl+Shift+I)
- cURL — командная утилита для отправки запросов:
curl -v https://selectel.ru/blog
🔹 Идемпотентность в API
1️⃣ Определение
- Идемпотентность — повторение действия не изменяет результат после первого выполнения.
- Позволяет избежать дублирования и непредсказуемых результатов при сетевых сбоях.
2️⃣ Примеры
Пицца:
orders = {}
def place_order(order_id, pizza):
if order_id in orders:
return "Заказ уже существует."
orders[order_id] = pizza
return "Заказ успешно создан."
first_try = place_order("123", "Пепперони")
second_try = place_order("123", "Пепперони")
print(first_try) # Заказ успешно создан.
print(second_try) # Заказ уже существует.
3️⃣ Идемпотентные методы HTTP
Любой повторный запрос не изменяет состояние сервера более одного раза.
4️⃣ Ключ идемпотентности
- Уникальный идентификатор операции (например UUID).
- Система распознает повторные запросы и не выполняет их снова.
- Пример: перевод денег, где повторный запрос не создает двойной перевод.
5️⃣ Плюсы и минусы
6️⃣ Вывод
- HTTP — расширяемый протокол прикладного уровня для веба.
- HTTPS обеспечивает безопасную передачу данных.
- Идемпотентность — ключ к надежности API и предотвращению дублирования действий.
https://youtu.be/OyfroULbRN4?si=u1IhOAgFGL1f66G5
и почитать тут https://habr.com/ru/articles/739166/