Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Протокол HTTP: полный разбор
HTTP (HyperText Transfer Protocol) — это прикладной протокол для передачи данных в интернете. Работает поверх TCP/IP и является фундаментом веб-приложений.
Модель запрос-ответ
HTTP работает по принципу клиент-сервер:
- Клиент инициирует соединение на порт 80 (HTTP) или 443 (HTTPS)
- Отправляет запрос с методом, URL и заголовками
- Сервер обрабатывает и отправляет ответ со статусом и данными
- Соединение закрывается (в HTTP/1.1 может переиспользоваться)
Структура HTTP запроса
GET /api/users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer token123
{"filter": "active"}
Строка запроса: METHOD URL HTTP/VERSION
METHOD— GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONSURL— путь и параметры запросаHTTP/VERSION— версия протокола
Заголовки — пары ключ-значение для метаинформации
Тело (body) — опционально, данные для POST/PUT/PATCH
Структура HTTP ответа
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 42
Set-Cookie: session=abc123
{"id": 123, "name": "John", "active": true}
Статусная строка: HTTP/VERSION CODE MESSAGE
Коды статуса:
- 1xx — Информационные (100 Continue)
- 2xx — Успех (200 OK, 201 Created, 204 No Content)
- 3xx — Редирект (301 Moved, 304 Not Modified)
- 4xx — Ошибка клиента (400 Bad Request, 401 Unauthorized, 404 Not Found)
- 5xx — Ошибка сервера (500 Internal, 503 Service Unavailable)
HTTP методы
| Метод | Цель | Тело | Кэшируется |
|---|---|---|---|
| GET | Получить ресурс | Нет | Да |
| POST | Создать ресурс | Да | Нет |
| PUT | Полное обновление | Да | Нет |
| PATCH | Частичное обновление | Да | Нет |
| DELETE | Удалить ресурс | Нет | Нет |
| HEAD | GET без тела | Нет | Да |
| OPTIONS | Получить методы | Нет | Да |
Версии HTTP
HTTP/1.1 (1997)
- Persistent connections (Keep-Alive)
- Pipelining (отправка нескольких запросов подряд)
- Проблема: head-of-line blocking
HTTP/2 (2015)
- Мультиплексирование (параллельные потоки в одном соединении)
- Сжатие заголовков (HPACK)
- Push Server (сервер может отправлять данные без запроса)
- Требует HTTPS
HTTP/3 (2022)
- Поверх QUIC (UDP вместо TCP)
- Быстрее подключение
- Лучше на медленных сетях
Безопасность: HTTPS
HTTPS = HTTP + TLS/SSL шифрование
import requests
# Автоматически использует HTTPS
response = requests.get("https://api.example.com/users")
# Проверка сертификата (по умолчанию включена)
response = requests.get(
"https://api.example.com/users",
verify=True # Проверяет SSL сертификат
)
Состояние: cookies и сессии
HTTP — stateless протокол. Для отслеживания состояния используют:
import requests
# Сессия сохраняет cookies между запросами
session = requests.Session()
session.post("https://api.example.com/login", json={"user": "john"})
response = session.get("https://api.example.com/profile") # Имеет cookie
# Или вручную
response = requests.get(
"https://api.example.com/profile",
cookies={"session_id": "abc123"}
)
Кэширование
# Заголовки кэширования
Cache-Control: max-age=3600 # Кэш на 1 час
ETag: "33a64df5425f" # Версия ресурса
Last-Modified: Wed, 22 Mar 2023 12:00:00 GMT
# При повторном запросе клиент отправляет:
If-None-Match: "33a64df5425f"
# Сервер отвечает 304 Not Modified (без передачи данных)
Практический пример с Python
import requests
# Простой запрос
response = requests.get("https://api.github.com/users/octocat")
print(response.status_code) # 200
print(response.json()) # Распарсенный JSON
# Запрос с параметрами
response = requests.get(
"https://api.github.com/search/repositories",
params={"q": "language:python", "sort": "stars"}
)
# POST с данными
response = requests.post(
"https://api.example.com/users",
json={"name": "John", "email": "john@example.com"},
headers={"Authorization": "Bearer token123"}
)
# Обработка ошибок
try:
response = requests.get("https://api.example.com/users/999")
response.raise_for_status() # Выбросит HTTPError на 4xx/5xx
except requests.exceptions.HTTPError as e:
print(f"HTTP ошибка: {e}")
HTTP — простой, но мощный протокол, который доминирует в веб-разработке благодаря масштабируемости и универсальности.