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

У каких методов HTTP-запроса нет Body

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

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

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

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

HTTP методы без Body

В HTTP спецификации (RFC 7231) существуют методы, которые не должны содержать тело запроса (body).

Методы БЕЗ Body

Основные методы без тела:

  1. GET — получение данных
  • Нет body в запросе
  • Данные передаются в URL (query parameters)
GET /users?page=1&limit=10 HTTP/1.1
  1. HEAD — как GET, но без body в ответе
  • Нет body в запросе
  • Сервер не отправляет body в ответе
  1. DELETE — удаление ресурса
  • Технически может содержать body, но обычно не используется
  • Данные передаются через URL или query params
  1. CONNECT — установка туннеля (редко)
  • Нет body в запросе
  • Используется для HTTPS туннелей через прокси
  1. TRACE — диагностика (запрещена в современных браузерах)
  • Нет body в запросе

Методы С Body

Методы, которые могут/должны содержать body:

  1. POST — создание нового ресурса
  2. PUT — полное обновление ресурса
  3. PATCH — частичное обновление ресурса
  4. OPTIONS — информация о доступных методах

Практический пример в Node.js

const express = require('express');
const app = express();

// GET — должен быть без body
app.get('/users', (req, res) => {
  const page = req.query.page;
  res.json({ users: [] });
});

// HEAD — как GET, но без body в ответе
app.head('/users/:id', (req, res) => {
  res.set('X-Resource-Exists', 'true');
  res.end();
});

// DELETE — может быть без body
app.delete('/users/:id', (req, res) => {
  const id = req.params.id;
  res.json({ deleted: true });
});

// POST — ДОЛЖЕН быть с body
app.post('/users', express.json(), (req, res) => {
  const { name, email } = req.body;
  res.json({ id: 1, name, email });
});

// PUT — ДОЛЖЕН быть с body
app.put('/users/:id', express.json(), (req, res) => {
  const { name, email } = req.body;
  res.json({ id: req.params.id, name, email });
});

// PATCH — МОЖЕТ быть с body
app.patch('/users/:id', express.json(), (req, res) => {
  const updates = req.body;
  res.json({ id: req.params.id, ...updates });
});

Важные моменты

1. GET с body — плохая практика

Браузеры могут игнорировать body. Используй query params:

// Неправильно
fetch('/api/users', {
  method: 'GET',
  body: JSON.stringify({ search: 'john' })
});

// Правильно
fetch('/api/users?search=john');

2. DELETE может иметь body, но это редко

Стандартно используется без body:

DELETE /resources/123 HTTP/1.1

Таблица методов

МетодBody запросBody ответИдемпотентныйКэшируемый
GETНетДаДаДа
HEADНетНетДаДа
POSTДаДаНетНет
PUTДаДаДаНет
PATCHДаДаНетНет
DELETEНетДаДаНет
OPTIONSНетДаДаНет

Key takeaway: Следуй спецификации HTTP — это делает API предсказуемым и совместимым с инструментами (кэши, прокси, браузеры).

У каких методов HTTP-запроса нет Body | PrepBro