← Назад к вопросам

В чем разница между запросом и ответом сервера?

1.3 Junior🔥 241 комментариев
#API и сетевые протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между HTTP запросом и ответом сервера

Это фундаментальная концепция веб-разработки. Клиент отправляет запрос, сервер отправляет ответ.

HTTP Запрос (Request)

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

Структура запроса:

[METHOD] [URL] [HTTP VERSION]
[HEADERS]

[BODY]

Пример:

GET /api/v1/users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGc...
Content-Type: application/json
User-Agent: Mozilla/5.0
Accept: application/json

Основные части:

  1. METHOD (HTTP глагол)

    • GET — получить ресурс
    • POST — создать новый ресурс
    • PUT — полное обновление ресурса
    • PATCH — частичное обновление
    • DELETE — удалить ресурс
    • HEAD — как GET но без body
  2. URL (Uniform Resource Locator)

    https://api.example.com/api/v1/users/123?sort=name&limit=10
    │       │                 │                │
    Protocol Domain            Path            Query params
    
  3. Headers (Заголовки)

    • Host — адрес сервера
    • Content-Type — тип данных в body (application/json, text/html)
    • Authorization — токен доступа
    • Accept — какой тип ответа клиент хочет
    • User-Agent — что отправляет запрос
    • Custom headers — свои заголовки
  4. Body (Тело запроса)

    • Есть только в POST, PUT, PATCH
    • Отсутствует в GET, DELETE, HEAD
    • JSON, XML, form data и т.д.

Пример запроса с body:

POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 45

{
  "name": "Alice",
  "email": "alice@example.com",
  "age": 30
}

HTTP Ответ (Response)

Сервер отправляет ответ на запрос клиента.

Структура ответа:

HTTP/1.1 [STATUS CODE] [STATUS TEXT]
[HEADERS]

[BODY]

Пример:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 52
Set-Cookie: sessionId=abc123; Path=/; HttpOnly
X-Rate-Limit: 1000

{
  "id": 123,
  "name": "Alice",
  "email": "alice@example.com"
}

Основные части:

  1. Status Code (Код статуса)

    • 200 OK — успешно
    • 201 Created — ресурс создан
    • 204 No Content — успешно, но нет данных
    • 400 Bad Request — ошибка в запросе
    • 401 Unauthorized — не авторизован
    • 403 Forbidden — нет доступа
    • 404 Not Found — ресурс не найден
    • 500 Internal Server Error — ошибка на сервере
    • 503 Service Unavailable — сервис недоступен
  2. Headers (Заголовки ответа)

    • Content-Type — тип данных в body
    • Content-Length — размер body
    • Set-Cookie — установить cookies
    • Cache-Control — кэширование
    • Access-Control-* — CORS заголовки
    • X-Custom-Header — свои заголовки
  3. Body (Тело ответа)

    • JSON, HTML, XML, images, files
    • Может быть пустым (например в DELETE)

На примере Express

import express, { Request, Response } from 'express';

const app = express();

// Получение запроса и отправка ответа
app.post('/api/v1/users', (req: Request, res: Response) => {
  // ---- АНАЛИЗ ЗАПРОСА ----
  const method = req.method;           // "POST"
  const url = req.url;                 // "/api/v1/users"
  const headers = req.headers;         // { content-type, authorization, ... }
  const body = req.body;               // { name: "Alice", ... }
  const query = req.query;             // ?sort=name → { sort: "name" }
  const params = req.params;           // /:id → { id: "123" }
  const ip = req.ip;                   // IP клиента
  const userAgent = req.get('User-Agent'); // браузер/клиент
  
  // Валидация
  if (!body.name || !body.email) {
    // ---- ОТПРАВКА ОШИБКИ ----
    return res.status(400).json({
      error: 'Name and email are required'
    });
  }
  
  // Обработка
  const user = {
    id: 123,
    name: body.name,
    email: body.email,
    createdAt: new Date()
  };
  
  // ---- ОТПРАВКА УСПЕШНОГО ОТВЕТА ----
  res.status(201)                           // Status code
    .set('Content-Type', 'application/json') // Header
    .set('X-Custom-Header', 'value')        // Custom header
    .json(user);                            // Body
  
  // Эквивалент:
  // res.status(201).json(user);
});

app.listen(3000);

Полный цикл Request-Response

// КЛИЕНТ (браузер)
const response = await fetch('/api/v1/users/123', {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Authorization': 'Bearer token123'
  }
});

// ↓ HTTP запрос отправляется на сервер ↓

// СЕРВЕР (Express)
app.get('/api/v1/users/:id', (req, res) => {
  const userId = req.params.id;  // "123" из URL
  
  // Поиск пользователя
  const user = database.findUser(userId);
  
  if (!user) {
    res.status(404).json({ error: 'User not found' });
    return;
  }
  
  res.status(200).json(user);
});

// ↓ HTTP ответ отправляется клиенту ↓

// КЛИЕНТ получает ответ
const data = await response.json();
console.log(data); // { id: 123, name: "Alice", ... }

Различия в таблице

АспектЗапросОтвет
ОтправляетКлиентСервер
URLЕстьНет
METHODЕсть (GET/POST/...)Нет
Status codeНетЕсть (200/404/...)
BodyОпциональноОпционально
HeadersЕстьЕсть
ПримерGET /api/users200 OK + JSON

REST API примеры

1. Получение списка пользователей

-- ЗАПРОС
GET /api/v1/users?limit=10 HTTP/1.1
Host: api.example.com

-- ОТВЕТ
HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "name": "Alice" },
  { "id": 2, "name": "Bob" }
]

2. Создание пользователя

-- ЗАПРОС
POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json

{ "name": "Alice", "email": "alice@example.com" }

-- ОТВЕТ
HTTP/1.1 201 Created
Content-Type: application/json
Location: /api/v1/users/123

{ "id": 123, "name": "Alice", "email": "alice@example.com" }

3. Ошибка валидации

-- ЗАПРОС
POST /api/v1/users HTTP/1.1
Host: api.example.com
Content-Type: application/json

{ "name": "" }

-- ОТВЕТ
HTTP/1.1 400 Bad Request
Content-Type: application/json

{ "error": "Name is required", "code": "VALIDATION_ERROR" }

Основные моменты

  1. Запрос инициирует клиент, ответ отправляет сервер
  2. METHOD определяет операцию — GET читает, POST создает
  3. Status code указывает результат — 200 успех, 400+ ошибка
  4. Headers содержат метаданные — тип, размер, кэширование
  5. Body может быть в обоих — данные запроса и ответа
  6. One request = One response — всегда парная связь
В чем разница между запросом и ответом сервера? | PrepBro