Лев Корольков
Руководитель IT-департамента EFSOL Oblako
Время чтения: 18 мин

HTTP

Протокол передачи веб-данных

HTTP, или Hypertext Transfer Protocol, — прикладной протокол обмена данными между клиентом и сервером. Он лежит в основе работы веб-сайтов, REST API, мобильных приложений, микросервисов и множества интернет-сервисов.

Когда пользователь открывает страницу в браузере, клиент отправляет HTTP Request серверу. Сервер обрабатывает запрос и возвращает HTTP Response с HTML, JSON, изображением, файлом или другим содержимым.

HTTP определяет формат запроса и ответа, методы операций, заголовки, коды состояния и правила передачи данных между приложениями.

HTTP отвечает не за физическую доставку пакетов по сети, а за понятный приложениям формат запросов и ответов поверх транспортной инфраструктуры.

Что такое HTTP простыми словами

HTTP можно представить как язык общения браузера и веб-сервера.

Клиент говорит: дай мне страницу /products. Сервер отвечает: запрос выполнен успешно, вот данные.

Client → HTTP Request → Server
Client ← HTTP Response ← Server

Такой механизм используется не только браузерами. Backend может обращаться по HTTP к другому Backend, мобильное приложение — к API, а Webhook — отправлять уведомление во внешнюю систему.

Расшифровка HTTP

HTTP означает Hypertext Transfer Protocol — протокол передачи гипертекста.

Исторически он создавался прежде всего для передачи HTML-документов, но современный HTTP используется для практически любых типов данных.

Через него передают JSON, XML, изображения, видео, CSS, JavaScript, архивы и бинарные файлы.

Как работает HTTP

  1. Клиент определяет адрес сервера.
  2. При необходимости DNS преобразует доменное имя в IP.
  3. Устанавливается сетевое соединение.
  4. Клиент отправляет HTTP Request.
  5. Server обрабатывает запрос.
  6. Server возвращает HTTP Response.
  7. Клиент интерпретирует полученные данные.

HTTP Request

HTTP Request — сообщение от клиента серверу.

Оно содержит Method, путь к ресурсу, Headers и при необходимости Body.

GET /products/42 HTTP/1.1
Host: example.com
Accept: application/json

В этом примере клиент запрашивает товар с идентификатором 42.

HTTP Response

HTTP Response — ответ сервера на запрос клиента.

Он содержит Status Code, Headers и обычно Response Body.

HTTP/1.1 200 OK
Content-Type: application/json

{"id":42,"name":"Ноутбук"}

Код 200 сообщает об успешной обработке, а Content-Type показывает формат данных.

Структура HTTP Request

ЧастьНазначение
MethodОпределяет тип действия
URL или PathУказывает ресурс
HeadersПередают служебные параметры
BodyСодержит отправляемые данные

HTTP Methods

Метод HTTP описывает намерение клиента.

MethodТипичный смысл
GETПолучить данные
POSTСоздать ресурс или выполнить действие
PUTЗаменить или обновить ресурс
PATCHЧастично изменить ресурс
DELETEУдалить ресурс
HEADПолучить Headers без обычного Body
OPTIONSПолучить информацию о поддерживаемых возможностях

GET

GET используется для получения ресурса.

GET /users/125

Запрос не должен изменять бизнес-состояние ресурса только из-за самого чтения.

GET особенно часто применяется для страниц, API-выборок и загрузки статических файлов.

POST

POST обычно используют для создания ресурса или выполнения действия.

POST /orders

Request Body может содержать новый заказ в JSON.

Повтор одного POST не всегда безопасен, поскольку сервер может создать еще один ресурс или повторно выполнить операцию.

PUT

PUT обычно означает создание или полную замену представления ресурса по известному адресу.

Конкретный API Contract определяет точную семантику.

В правильно спроектированной модели одинаковый повторный PUT обычно должен приводить к тому же итоговому состоянию.

PATCH

PATCH используется для частичного изменения ресурса.

Например, приложение хочет изменить только status заказа, не передавая остальные поля.

Формат частичного изменения определяется API.

DELETE

DELETE сообщает о необходимости удалить ресурс или перевести его в состояние, эквивалентное удалению в терминах API.

Фактически Backend может использовать физическое удаление или Soft Delete.

HEAD

HEAD похож на GET, но клиент запрашивает только Headers без обычного Response Body.

Это может использоваться для проверки метаданных ресурса или доступности.

OPTIONS

OPTIONS позволяет запросить информацию о возможностях взаимодействия с ресурсом.

Он также играет важную роль в CORS Preflight Requests браузеров.

Что такое URL

URL определяет адрес ресурса.

https://api.example.com/products/42?currency=EUR

Он может включать Scheme, Host, Port, Path, Query Parameters и другие части.

Scheme

Scheme показывает используемую схему доступа.

http://
https://

HTTPS означает HTTP с защищенным транспортом через TLS.

Host

Host определяет имя сервера.

api.example.com

DNS обычно преобразует это имя в IPv4 или IPv6 Address.

Path

Path обозначает конкретный ресурс или Endpoint.

/products/42

Backend Router сопоставляет этот путь с соответствующим обработчиком.

Query Parameters

Query Parameters передаются после символа вопроса.

/products?category=laptop&page=2

Они часто используются для фильтрации, поиска, сортировки и Pagination.

HTTP Headers

Headers передают метаданные запроса или ответа.

Например:

Content-Type: application/json
Authorization: Bearer token
Accept: application/json

Headers влияют на Authentication, Cache, форматы данных, Compression и другие аспекты взаимодействия.

Content-Type

Content-Type сообщает формат Body.

Content-Type: application/json

Это означает, что тело сообщения содержит JSON.

Для HTML используется text/html, а для других форматов — соответствующие Media Types.

Accept

Accept показывает, какой формат ответа предпочитает клиент.

Accept: application/json

Server может использовать этот Header для Content Negotiation.

Например, один Endpoint теоретически может возвращать HTML одному клиенту и JSON другому при наличии такой логики.

Content Negotiation

Content Negotiation позволяет клиенту и серверу согласовать подходящее представление ресурса.

Для этого могут использоваться Headers Accept, Accept-Language и другие механизмы.

Server не обязан поддерживать все запрашиваемые варианты.

Authorization Header

Authorization используется для передачи данных, связанных с аутентифицированным доступом.

Authorization: Bearer ey...

Так API может получать Access Token.

Передавать секретные Credentials следует только через защищенное соединение HTTPS.

HTTP Body

Body содержит основное содержимое сообщения.

Например, POST Request может передавать JSON:

{
 "customer_id": 125,
 "product_id": 42,
 "quantity": 1
}

GET обычно используется без Request Body, тогда как POST, PUT и PATCH часто содержат данные.

HTTP Status Codes

Status Code показывает результат обработки запроса.

ДиапазонЗначение
1xxИнформационные ответы
2xxУспешное выполнение
3xxПеренаправление
4xxОшибка на стороне запроса клиента
5xxОшибка обработки на стороне сервера

200 OK

200 означает успешную обработку запроса.

Например, GET возвращает найденный ресурс.

201 Created

201 обычно используют после успешного создания нового ресурса.

Например, POST /orders создал новый заказ.

204 No Content

204 означает успешное выполнение без Response Body.

Такой ответ может использоваться после удаления или обновления, когда возвращать данные не требуется.

301 и 302

Коды семейства 3xx используются для перенаправления клиента.

Server передает новое местоположение через соответствующий Header, а клиент может выполнить новый Request.

304 Not Modified

304 используется в механизмах HTTP Cache.

Server сообщает, что сохраненная клиентом версия ресурса все еще актуальна и повторно передавать Body не нужно.

400 Bad Request

400 означает, что запрос некорректен на уровне, который Server не может нормально обработать.

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

401 Unauthorized

401 обычно означает, что запрос требует корректной Authentication.

Название кода исторически может вводить в заблуждение: на практике речь обычно идет именно об отсутствии или проблеме Authentication Credentials.

403 Forbidden

403 означает, что Server понял запрос, но не разрешает выполнить операцию.

Например, пользователь аутентифицирован, но не имеет роли администратора.

404 Not Found

404 означает, что запрашиваемый ресурс не найден или Server не раскрывает его наличие.

Это один из самых известных HTTP Status Codes.

409 Conflict

409 указывает на конфликт с текущим состоянием ресурса.

Например, API не может создать пользователя с уже существующим уникальным email.

422

В некоторых API код 422 используется, когда формат запроса понятен, но данные не проходят прикладную валидацию.

Конкретная модель ошибок должна быть последовательно описана в API Contract.

429 Too Many Requests

429 означает, что клиент превысил разрешенный Rate Limit.

API может попросить повторить запрос позже.

500 Internal Server Error

500 означает внутреннюю ошибку при обработке Request.

Клиенту не следует показывать технический Stack Trace или секретные детали приложения.

502 Bad Gateway

502 часто появляется, когда Proxy или Gateway получил некорректный ответ от upstream-сервиса.

Например, Nginx работает, но Backend завершился или отвечает неправильно.

503 Service Unavailable

503 сообщает, что сервис временно не готов обработать запрос.

Причиной может быть перегрузка, Maintenance или недоступность критичной зависимости.

504 Gateway Timeout

504 означает, что Gateway или Proxy слишком долго ждал ответ от upstream.

Это распространенная ошибка в распределенных системах.

HTTP и TCP/IP

HTTP работает на прикладном уровне поверх сетевого стека.

В классической модели HTTP/1.1 и HTTP/2 обычно используют TCP, а TCP работает поверх IPv4 или IPv6.

HTTP
↓
TCP
↓
IP
↓
Network

HTTP не занимается маршрутизацией IP-пакетов самостоятельно.

HTTP и HTTPS

HTTPS — это HTTP, передаваемый через защищенный TLS-канал.

TLS обеспечивает Encryption, Integrity и проверку подлинности Server через Certificates.

Для внешних веб-сайтов и API HTTPS является стандартным способом безопасного обмена данными.

Почему обычный HTTP небезопасен

Если HTTP передается без TLS, содержимое трафика потенциально можно прочитать или изменить на сетевом пути.

Пароли, Tokens и персональные данные нельзя безопасно передавать через открытый HTTP в недоверенной сети.

TLS Handshake

Перед передачей HTTPS-данных Client и Server выполняют TLS Handshake.

Они согласуют параметры шифрования и проверяют Certificate.

После этого HTTP-сообщения передаются внутри защищенного соединения.

HTTP/1.1

HTTP/1.1 долгое время является широко используемой версией протокола.

Он поддерживает постоянные соединения, Headers, Chunked Transfer и другие механизмы, ставшие основой современной веб-инфраструктуры.

Keep-Alive

Без повторного использования соединения клиенту пришлось бы создавать новый TCP Connection для каждого файла страницы.

Keep-Alive позволяет передавать несколько HTTP Requests через одно соединение.

Это уменьшает количество Handshakes и сетевые накладные расходы.

HTTP/2

HTTP/2 изменяет способ передачи HTTP-сообщений и позволяет эффективнее использовать одно соединение.

Несколько потоков могут передаваться параллельно в рамках одного Connection.

Также применяется более эффективное представление Headers.

Multiplexing

Multiplexing позволяет одному соединению обслуживать несколько независимых HTTP Streams.

Это уменьшает необходимость создавать множество TCP Connections для параллельной загрузки ресурсов.

HTTP/3

HTTP/3 использует транспорт на основе QUIC вместо классической модели HTTP поверх TCP.

QUIC работает поверх UDP и реализует собственные механизмы надежной передачи и управления потоками.

Для прикладного разработчика базовая модель Methods, Headers и Status Codes при этом сохраняется.

HTTP/2 и HTTP/3 не меняют смысл REST API

Backend по-прежнему может использовать GET /users или POST /orders.

Изменяется прежде всего транспорт и эффективность передачи, а не бизнес-семантика Endpoint.

HTTP и REST API

REST API часто использует HTTP как транспорт и применяет Methods, URLs, Headers и Status Codes для работы с ресурсами.

Например:

GET /products
POST /orders
PATCH /users/125
DELETE /sessions/current

При этом HTTP и REST не являются синонимами. HTTP можно использовать и без REST.

HTTP и GraphQL

GraphQL API также часто работает поверх HTTP.

Вместо большого количества REST Endpoints приложение отправляет GraphQL Query на определенный Endpoint.

Таким образом, HTTP обеспечивает транспорт, а GraphQL задает модель запросов к данным.

HTTP и gRPC

gRPC использует HTTP/2 как часть своей транспортной модели.

Но его сообщения и контракт отличаются от обычного JSON REST API.

Поэтому использование HTTP не делает gRPC обычным REST-сервисом.

HTTP и Webhook

Webhook — HTTP Request, автоматически отправляемый при наступлении события.

Например, платежная система отправляет POST на URL интернет-магазина после успешного платежа.

Получатель должен проверять Authentication или Signature, учитывать Retry и делать обработку идемпотентной.

HTTP и Backend

Backend Server принимает HTTP Requests, выполняет Authentication, Validation и бизнес-логику и формирует HTTP Response.

Framework обычно предоставляет Router, Middleware, Request Object и Response API.

HTTP Router

Router сопоставляет URL и Method с обработчиком.

GET /products → listProducts
GET /products/42 → getProduct
POST /products → createProduct

Так один Backend обслуживает множество Endpoints.

Middleware

Middleware обрабатывает Request до или после основного Handler.

Через него часто реализуют Authentication, Logging, CORS, Rate Limiting и Trace ID.

HTTP и Frontend

Frontend использует HTTP для загрузки HTML, CSS, JavaScript и данных API.

JavaScript может выполнять Requests через браузерные API без полной перезагрузки страницы.

Это основа SPA и многих современных веб-интерфейсов.

HTTP и AJAX

AJAX — исторически сложившееся название подхода, при котором Browser отправляет HTTP Requests в фоне и обновляет страницу без полной перезагрузки.

Сегодня данные часто передаются в JSON, а не обязательно XML.

HTTP и мобильные приложения

Мобильное приложение обычно взаимодействует с Backend через HTTPS API.

Для Server это обычный HTTP Client, аналогичный браузеру по базовой сетевой модели.

Cookies

Cookie позволяет Server передать небольшое значение Browser, которое затем может отправляться в последующих HTTP Requests.

Cookies широко применяются для Sessions, пользовательских настроек и других браузерных сценариев.

Session Cookie

Server может после входа пользователя создать Session ID и отправить его в Cookie.

Browser автоматически прикладывает Cookie к последующим запросам согласно установленным правилам.

Backend использует идентификатор для поиска Session.

Secure Cookie

Флаг Secure ограничивает передачу Cookie защищенными соединениями.

Для Authentication Cookies это важная настройка.

HttpOnly

HttpOnly ограничивает доступ клиентского JavaScript к Cookie.

Это уменьшает часть рисков кражи Authentication Cookie через определенные XSS-сценарии.

SameSite

SameSite управляет отправкой Cookies в межсайтовых сценариях.

Он играет важную роль в защите от части CSRF-атак.

HTTP и Authentication

HTTP сам по себе не определяет единственный способ аутентификации пользователей.

Приложения могут применять Sessions, Tokens, API Keys, OAuth и другие схемы.

Credentials часто передаются через Headers или Cookies.

Bearer Token

API может принимать Access Token через Authorization Header.

Authorization: Bearer token

Такой Token нужно защищать, поскольку владеющий им клиент потенциально получает соответствующие права.

HTTP Basic Authentication

Basic Authentication передает учетные данные в специальном Header в кодированном виде.

Само кодирование не является Encryption, поэтому такая схема должна использоваться только поверх HTTPS и там, где она подходит по требованиям.

CORS

CORS, или Cross-Origin Resource Sharing, — механизм браузера и HTTP Headers, контролирующий доступ JavaScript одного Origin к ресурсам другого Origin.

Например, Frontend работает на app.example.com, а API — api.example.com.

Server должен вернуть подходящие CORS Headers.

Origin

Origin определяется сочетанием Scheme, Host и Port.

Например:

https://example.com
https://api.example.com

имеют разные Origins из-за разных Hosts.

Preflight Request

Перед некоторыми Cross-Origin Requests Browser отправляет OPTIONS Request.

Он проверяет, разрешает ли Server требуемый Method и Headers.

Этот запрос называют CORS Preflight.

HTTP Cache

HTTP имеет встроенные механизмы кэширования.

Browser, CDN и Proxy могут временно сохранять Response и повторно использовать его без обращения к Origin Server.

Это уменьшает Latency и нагрузку.

Cache-Control

Cache-Control определяет правила кэширования.

Например, Server может указать, сколько времени ресурс считается актуальным или разрешено ли хранить его в shared Cache.

ETag

ETag — идентификатор версии представления ресурса.

Client может при повторном Request сообщить известный ETag.

Если ресурс не изменился, Server возвращает 304 вместо полной передачи Body.

Last-Modified

Last-Modified сообщает время последнего изменения ресурса.

Он также может использоваться для условных запросов и экономии трафика.

HTTP и CDN

CDN кэширует HTTP Content на Edge Servers ближе к пользователям.

Статические изображения, JavaScript и другие ресурсы могут отдаваться без обращения к Origin.

Правильные Cache Headers существенно влияют на эффективность CDN.

HTTP Compression

Response можно сжимать перед передачей.

Это уменьшает сетевой трафик, особенно для HTML, JSON, CSS и JavaScript.

Server и Client договариваются о поддерживаемых вариантах через HTTP Headers.

HTTP и Proxy

Proxy находится между Client и Server.

Он может фильтровать, кэшировать или маршрутизировать трафик.

В зависимости от направления различают Forward Proxy и Reverse Proxy.

Reverse Proxy

Reverse Proxy принимает внешние HTTP Requests и передает их Backend Servers.

Например, Nginx может завершать TLS, выполнять Load Balancing и добавлять Headers.

HTTP и Nginx

Nginx часто используется как HTTP Server и Reverse Proxy.

Он может отдавать статические файлы и передавать динамические Requests Backend-приложению.

Forwarded Headers

Если Backend находится за Reverse Proxy, он может видеть IP Proxy вместо реального Client Address.

Для передачи исходной информации используются специальные Headers.

Backend должен доверять им только от известных Proxy, иначе клиент сможет попытаться подделать значения.

HTTP и Load Balancer

Load Balancer распределяет HTTP Requests между несколькими Backend Instances.

Это позволяет масштабировать сервис и переживать отказ отдельных серверов.

Health Checks помогают исключать неисправные экземпляры.

HTTP Health Check

Load Balancer может регулярно отправлять Request:

GET /health

Если Backend возвращает ожидаемый статус, он считается готовым принимать Traffic.

Health Endpoint не должен выполнять слишком тяжелые операции.

HTTP и микросервисы

Microservices часто взаимодействуют через HTTP REST или другие HTTP-based протоколы.

Каждый сетевой Request может завершиться Timeout, поэтому распределенная система должна учитывать частичные сбои.

Timeout

HTTP Client должен иметь ограничение времени ожидания.

Без Timeout один зависший внешний сервис способен надолго занять Threads или Connections Backend.

Обычно отдельно учитывают Connection Timeout и ожидание Response.

Retry

После временной сетевой ошибки Request можно повторить, но не всегда это безопасно.

GET обычно проще повторять, а POST платежа может создать двойной эффект.

Поэтому Retry должен учитывать идемпотентность операции.

Идемпотентность HTTP Methods

Идемпотентная операция при многократном одинаковом выполнении приводит к тому же итоговому состоянию, что и однократное выполнение.

GET, PUT и DELETE по стандартной семантике проектируются как идемпотентные, хотя конкретное приложение может нарушить ожидаемое поведение.

POST в общем случае идемпотентным не считается.

Idempotency Key

Для критичных POST Operations API может принимать уникальный Idempotency Key.

Если клиент повторяет запрос после Timeout, Server определяет, что операция уже выполнялась, и не создает второй бизнес-эффект.

Такой подход часто полезен для платежей и заказов.

HTTP и Rate Limiting

API ограничивает количество Requests одного пользователя, Token или IP за период.

При превышении лимита может возвращаться 429.

Rate Limiting защищает сервис от перегрузки и злоупотреблений.

HTTP и API Gateway

API Gateway принимает внешние HTTP Requests и направляет их нужным внутренним сервисам.

На Gateway могут выполняться Authentication, Rate Limiting, Logging и Routing.

HTTP и Docker

Контейнерное Backend-приложение может слушать HTTP Port внутри Docker Network.

Reverse Proxy или Port Mapping делает сервис доступным снаружи.

Host:8080 → Container:80

Для связи между контейнерами удобнее использовать DNS Name сервиса.

HTTP и Kubernetes

В Kubernetes HTTP-приложения обычно доступны через Service и Ingress или другой Gateway-компонент.

Pods могут меняться, а стабильный сетевой Endpoint остается.

Ingress

Ingress-механизм позволяет маршрутизировать входящие HTTP Requests по Host и Path.

Например:

api.example.com/users → user-service
api.example.com/orders → order-service

Так множество сервисов могут использовать общий внешний вход.

HTTP и Service Mesh

Service Mesh может анализировать HTTP Traffic между сервисами и применять Routing, Retry, mTLS и Observability.

При этом само приложение продолжает работать с обычными HTTP Requests.

HTTP и Observability

HTTP является удобной точкой измерения производительности приложения.

Обычно отслеживают Request Rate, Error Rate, Latency и распределение Status Codes.

МетрикаНазначение
Request RateКоличество HTTP Requests
LatencyВремя обработки
4xx RateОшибки клиентских запросов
5xx RateСерверные ошибки
Payload SizeРазмер передаваемых данных

HTTP и OpenTelemetry

OpenTelemetry может создавать Span для входящего и исходящего HTTP Request.

Так Trace показывает путь запроса через API Gateway, Backend, Database и внешние сервисы.

Correlation ID

Correlation ID помогает связать Logs нескольких сервисов с одним HTTP Request.

Идентификатор может передаваться через Header между компонентами.

Access Log

Web Server обычно записывает Method, Path, Status Code, время обработки и другие параметры HTTP Request.

Access Logs помогают искать ошибки и анализировать нагрузку.

При этом следует избегать записи паролей, Tokens и других секретных данных.

HTTP и безопасность

Для безопасной эксплуатации HTTP API необходимо применять несколько уровней защиты.

  • использовать HTTPS;
  • проверять Authentication и Authorization;
  • валидировать Input;
  • ограничивать размер Body;
  • настраивать Rate Limiting;
  • не раскрывать Stack Trace;
  • защищать Cookies;
  • правильно настраивать CORS.

HTTP и XSS

XSS возникает на уровне веб-приложения, когда недоверенные данные могут выполняться в Browser как Script.

HTTP Headers, Content Security Policy, экранирование вывода и безопасная Frontend-разработка помогают уменьшать риски.

HTTP и CSRF

CSRF связан с ситуацией, когда Browser пользователя отправляет нежелательный авторизованный Request на другой сайт.

Для защиты используются SameSite Cookies, CSRF Tokens и другие механизмы.

HTTP Header Injection

Нельзя без проверки помещать пользовательские данные в HTTP Headers.

Некорректная обработка переводов строк и других специальных символов может привести к уязвимостям.

Размер HTTP Request

Server должен ограничивать максимальный размер Body.

Без ограничений злоумышленник или ошибочный клиент может отправлять огромные Requests и потреблять память, сеть и CPU.

Large File Upload

Для больших файлов полезно применять потоковую загрузку или прямую передачу в Object Storage.

Не всегда разумно полностью загружать многогигабайтный файл в память Backend перед сохранением.

HTTP Streaming

HTTP позволяет передавать Response постепенно, не дожидаясь формирования всего содержимого.

Это полезно для больших файлов, потоковых ответов и некоторых real-time сценариев.

Server-Sent Events

Server-Sent Events позволяет Server отправлять поток событий Browser через долгоживущее HTTP-соединение.

Это удобно для однонаправленных обновлений от сервера к клиенту.

HTTP и WebSocket

WebSocket используется для постоянного двунаправленного взаимодействия Client и Server.

Начальная установка соединения исторически связана с HTTP-механизмами, после чего коммуникация работает по другой модели.

Для обычного Request/Response HTTP часто проще.

HTTP и SEO

HTTP Status Codes имеют важное значение для поисковых систем.

200 сообщает об успешной странице, 301 — о постоянном перенаправлении, 404 — об отсутствии ресурса.

Неправильные коды способны мешать индексации и вводить Crawlers в заблуждение.

Robots и HTTP

Поисковые роботы получают страницы через HTTP так же, как другие Clients.

Server может возвращать различный Content-Type, Cache Headers и Status Codes.

Корректная HTTP-конфигурация является частью технического SEO.

Типичные ошибки при работе с HTTP

  1. Всегда возвращать 200 даже при ошибке.
  2. Использовать GET для операций, меняющих бизнес-состояние.
  3. Не устанавливать Timeout для внешних Requests.
  4. Повторять неидемпотентный POST без защиты.
  5. Передавать Tokens через незашифрованный HTTP.
  6. Неправильно настраивать CORS.
  7. Кэшировать персональные данные без учета политики Cache.
  8. Возвращать клиенту внутренний Stack Trace.
  9. Не ограничивать размер Request Body.
  10. Игнорировать 4xx и 5xx в мониторинге.

Как спроектировать HTTP API

Шаг 1. Определить ресурсы

Endpoint должен соответствовать понятной сущности или операции.

Шаг 2. Выбрать Method

Используйте GET для чтения, POST для создания или действий, PATCH для частичных изменений и другие методы по понятной семантике.

Шаг 3. Настроить Status Codes

Response должен корректно отражать результат операции.

Шаг 4. Описать JSON Contract

Поля Request и Response должны иметь стабильную структуру.

Шаг 5. Добавить Authentication

Защищенные Endpoints должны проверять личность и права.

Шаг 6. Добавить Timeout и Retry Policy

Сетевые ошибки должны обрабатываться предсказуемо.

Шаг 7. Настроить Observability

Нужно видеть Latency, Status Codes и Trace каждого критичного Request.

Шаг 8. Использовать HTTPS

Внешние API и сайты должны передавать чувствительные данные только по защищенному каналу.

Практический пример

Интернет-магазин предоставляет REST API для оформления заказа.

Frontend отправляет:

POST /orders
Content-Type: application/json
Authorization: Bearer token

Body содержит customer_id и товары.

API Gateway проверяет Token и Rate Limit, затем направляет Request в Order Service.

Backend валидирует данные, создает заказ в Database и возвращает 201 Created.

Если пользователь повторяет запрос из-за сетевого Timeout, Client передает Idempotency Key, поэтому второй заказ не создается.

Если Token отсутствует, API возвращает 401. Если товар не найден — подходящий 4xx Status. При внутреннем сбое — 5xx без раскрытия Stack Trace.

Nginx завершает TLS и передает HTTP Request Backend. OpenTelemetry связывает внешний Request с SQL Query и последующими вызовами сервисов.

Prometheus отслеживает HTTP Latency и долю 5xx. Благодаря этому команда может увидеть деградацию до массовых жалоб пользователей.

HTTP для бизнеса

HTTP является фундаментом большинства цифровых продуктов. Через него работают сайты, интернет-магазины, личные кабинеты, SaaS, мобильные приложения, интеграции и API партнеров.

Стандартизированная модель Request/Response упрощает интеграцию систем независимо от языка программирования.

При этом качество HTTP API напрямую влияет на надежность бизнеса: неверные Timeout, некорректные Status Codes или отсутствие идемпотентности могут приводить к сбоям, двойным операциям и сложной диагностике.

Когда использовать HTTP

  • нужен Web API;
  • клиент ожидает Request/Response;
  • работает Browser или Mobile Application;
  • нужно интегрироваться с внешним сервисом;
  • используются REST, GraphQL или Webhook;
  • требуется стандартный публичный сетевой интерфейс.

Когда одного HTTP недостаточно

Для длительных асинхронных задач может понадобиться Message Broker.

Для большого потока событий используются Kafka или другие Streaming Platforms.

Для постоянного двунаправленного real-time соединения может подойти WebSocket.

HTTP остается важной частью системы, но не обязан решать все виды межсервисного взаимодействия.

Связанные термины

ТерминСвязь с HTTP
HTTPSHTTP через защищенный TLS-канал
TCP/IPСетевая основа для классических HTTP-соединений
REST APIЧасто использует HTTP Methods и Status Codes
JSONПопулярный формат HTTP API
URLОпределяет адрес ресурса
HTTP HeaderПередает метаданные Request и Response
CookieХранит небольшие браузерные данные
CORSКонтролирует Cross-Origin Requests в Browser
NginxМожет работать как HTTP Server и Reverse Proxy
CDNКэширует и доставляет HTTP Content
WebhookHTTP Request, отправляемый при событии
OpenTelemetryТрассирует HTTP Requests между сервисами

Краткий итог

HTTP — прикладной протокол, который определяет правила обмена запросами и ответами между клиентом и сервером. Он использует Methods, URLs, Headers, Body и Status Codes и является основой веб-сайтов и большинства современных API.

HTTP может работать через разные поколения транспортной инфраструктуры, а HTTPS добавляет TLS и защищает данные от чтения и изменения на сетевом пути. Современные версии HTTP улучшают эффективность передачи, но сохраняют знакомую прикладную модель запросов и ответов.

Для production важно правильно использовать Status Codes, Cache, Authentication, CORS, Timeout, Retry и идемпотентность. Грамотно спроектированный HTTP-интерфейс делает интеграцию систем предсказуемой, безопасной и удобной для развития.

Частые вопросы

6 вопросов
Что такое HTTP?

HTTP, или Hypertext Transfer Protocol, — прикладной протокол обмена данными между клиентом и сервером. Он используется браузерами, веб-сайтами, REST API, мобильными приложениями и микросервисами.

Чем HTTP отличается от HTTPS?

HTTP определяет формат запросов и ответов, а HTTPS передает тот же HTTP через защищенный TLS-канал. TLS шифрует трафик и помогает проверить подлинность сервера.

Какие основные методы есть в HTTP?

К основным HTTP Methods относятся GET для чтения, POST для создания или действий, PUT для замены ресурса, PATCH для частичного изменения и DELETE для удаления. Также используются HEAD и OPTIONS.

Что означают коды 200, 404 и 500?

200 означает успешную обработку запроса, 404 — что ресурс не найден, а 500 — внутреннюю ошибку сервера. HTTP Status Codes позволяют клиенту понять результат операции без анализа текста ответа.

Что такое HTTP Header?

HTTP Header — служебное поле запроса или ответа. Через Headers передаются Content-Type, Authorization, Cache-Control, Accept, Cookies, CORS-параметры и другие метаданные.

Чем HTTP отличается от TCP?

HTTP — прикладной протокол, определяющий смысл запросов и ответов. TCP — транспортный протокол, обеспечивающий надежный поток данных между приложениями. Классические HTTP/1.1 и HTTP/2 обычно работают поверх TCP, тогда как HTTP/3 использует транспорт на основе QUIC.

Была ли статья полезна?
Документ обновляется командой EFSOL. Свяжитесь с нами, если нашли неточность.
Нужна консультация?

Поможем спроектировать, развернуть и сопроводить облачную или гибридную инфраструктуру под задачи вашего бизнеса.

Ответим в течение часа в рабочее время
Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.