HTTP (Hypertext Transfer Protocol) — основной протокол Всемирной паутины. Создан Тимом Бернерсом-Ли в 1989, сейчас на нём работают триллионы запросов в день. HTTPS — защищённая версия с шифрованием TLS.
Клиент-сервер
- Клиент (браузер, приложение) посылает запрос
- Сервер отвечает
- Stateless: каждый запрос независим, сервер не "помнит" предыдущих
Структура запроса
GET /users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJ...
Accept: application/json- Метод: GET, POST, PUT, DELETE, PATCH
- Путь
- Версия протокола
- Заголовки
- Тело (для POST/PUT)
Ответ
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 56
{"id":123,"name":"Alice"}Коды ответа
- 1xx — информационные: 100 Continue
- 2xx — успех: 200 OK, 201 Created, 204 No Content
- 3xx — перенаправления: 301 Moved, 302 Found, 304 Not Modified
- 4xx — ошибки клиента: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests
- 5xx — ошибки сервера: 500 Internal, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout
Методы
- GET: получение ресурса, безопасный, идемпотентный
- POST: создание, изменяющий
- PUT: замена ресурса
- PATCH: частичное обновление
- DELETE: удаление
- HEAD: как GET, но без тела
- OPTIONS: узнать разрешённые методы (CORS)
HTTPS
- HTTP + TLS (Transport Layer Security, ранее SSL)
- Шифрование передаваемых данных
- Аутентификация сервера через сертификаты (Let's Encrypt бесплатный)
- Целостность: защита от изменения в пути
TLS рукопожатие
- Клиент посылает "Hello" с поддерживаемыми шифрами
- Сервер отвечает сертификатом
- Клиент проверяет сертификат через корневые CA
- Обмен ключами: ECDHE (эфемерный)
- Симметричный сеанс
Версии HTTP
- HTTP/1.0 (1996): один запрос на соединение
- HTTP/1.1 (1997): keep-alive, pipelining
- HTTP/2 (2015): мультиплексирование, бинарный формат, server push
- HTTP/3 (2022): поверх QUIC (UDP), быстрее при плохой сети
Кэширование
- Cache-Control: max-age, no-cache, public/private
- ETag: идентификатор ресурса, для условных запросов (If-None-Match)
- Last-Modified + If-Modified-Since
- CDN используют эти заголовки для раздачи с края сети
Cookies и сессии
- Cookie — заголовок, сохраняющий данные на клиенте
- Session ID, CSRF-токены, настройки
- Флаги: HttpOnly (не доступен JS), Secure (только HTTPS), SameSite (защита от CSRF)
CORS
Cross-Origin Resource Sharing. Ограничение браузеров: запрос с одного домена к другому требует разрешения сервером через специальные заголовки (Access-Control-Allow-Origin).
Аутентификация
- Basic Auth: логин:пароль в base64 (требует HTTPS!)
- Bearer tokens: JWT или opaque, Authorization: Bearer ...
- OAuth 2.0: стандарт авторизации
- OpenID Connect: поверх OAuth для идентификации
Безопасность
- HTTPS везде (HSTS заголовок принуждает)
- CSP: ограничение источников загружаемых ресурсов
- Защита от CSRF: SameSite cookies, токены
- Защита от XSS: экранирование, CSP
- Rate limiting: ограничение запросов с одного IP
Инструменты
- curl: консольный HTTP-клиент
- Postman, Insomnia: GUI
- DevTools браузера: вкладка Network
- Wireshark: захват пакетов
- mitmproxy: MITM-прокси для отладки
Есть вопрос?
Вопросы и ответы · 0
Не поняли что-то?
Зарегистрируйтесь — и сможете задать вопрос автору объяснения.
Загрузка комментариев…