Стандарты HTTP, SSE и JSON-RPC
В современной веб-разработке используются различные протоколы и стандарты для обмена данными между клиентом и сервером. Рассмотрим три ключевых технологии: HTTP, Server-Sent Events (SSE) и JSON-RPC.
1. HTTP (HyperText Transfer Protocol)
HTTP — это протокол прикладного уровня для передачи гипертекстовых документов (HTML, JSON, XML и др.).
Основные характеристики:
- Работает по схеме «запрос-ответ» (клиент отправляет запрос → сервер отвечает).
- Не сохраняет состояние (stateless) — каждый запрос независим.
- Методы запросов: GET, POST, PUT, DELETE, PATCH и др.
- Коды ответов: 200 (OK), 404 (Not Found), 500 (Server Error) и др.
- Используется в REST API (но не ограничивается им).
Пример HTTP-запроса (GET):
GET /api/users/1 HTTP/1.1
Host: example.com
Ответ:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"name": "John Doe"
}
2. SSE (Server-Sent Events)
SSE — это технология, позволяющая серверу отправлять события клиенту в одном направлении (от сервера → клиенту).
Основные особенности:
- Работает поверх HTTP (использует текстовый поток).
- Поддерживает автоматическое переподключение.
- Проще, чем WebSockets (но только для односторонней связи).
- Использует заголовок
Content-Type: text/event-stream
.
Пример SSE на клиенте (JavaScript):
const eventSource = new EventSource('/updates');
eventSource.onmessage = (event) => {
console.log('Новое сообщение:', event.data);
};
Пример ответа сервера:
HTTP/1.1 200 OK
Content-Type: text/event-stream
data: {"message": "Hello!"}
data: {"message": "Update received"}
Применение: уведомления, ленты новостей, обновления статусов.
3. JSON-RPC
JSON-RPC — это протокол удаленного вызова процедур (RPC), использующий JSON для кодирования сообщений.
Основные принципы:
- Легковесный (минимум накладных расходов).
- Не зависит от транспорта (может работать через HTTP, WebSockets и др.).
- Поддерживает уведомления (без ответа) и пакетные запросы.
Пример запроса (вызов метода sum
):
{
"jsonrpc": "2.0",
"method": "sum",
"params": [5, 3],
"id": 1
}
Пример ответа:
{
"jsonrpc": "2.0",
"result": 8,
"id": 1
}
Используется в: Ethereum API, некоторых микросервисных архитектурах.
Сравнение технологий
Технология | Направление связи | Транспорт | Использование |
---|---|---|---|
HTTP | Запрос-ответ | TCP/IP | REST API, загрузка данных |
SSE | Сервер → Клиент | HTTP | Уведомления, стриминг |
JSON-RPC | Двусторонний | HTTP/WS | Удалённые вызовы процедур |
Когда что использовать?
- HTTP — классический REST API.
- SSE — если сервер должен отправлять данные без запросов (например, чаты).
- JSON-RPC — если нужны удалённые вызовы методов с минимальными накладными расходами.
Каждая технология имеет свои преимущества и выбирается в зависимости от задачи.