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

«У каких методов HTTP-запроса нет тела (Body)?» — вопрос из категории Сети, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Согласно семантике HTTP, методы GET, HEAD и OPTIONS не должны иметь тела запроса. Метод DELETE может иметь тело, но на практике оно часто игнорируется.

Почему так и как это работает в Node.js (Express):

  • GET & HEAD: Предназначены только для получения данных или заголовков. Серверы (и промежуточное ПО вроде body-parser) обычно игнорируют тело для этих методов.
  • OPTIONS: Используется для запроса информации о поддерживаемых методах (CORS). Тело не требуется.

Пример в Express:

const express = require('express');
const app = express();
app.use(express.json()); // body-parser для JSON

// Middleware body-parser НЕ будет парсить тело для GET запроса
app.get('/api/users', (req, res) => {
  // req.body будет пустым объектом {} или undefined, даже если клиент отправил тело
  console.log(req.body); // {}
  res.json({ users: [] });
});

// Для передачи данных в GET-запросе используйте query-параметры
// GET /api/users?name=John&age=30

Передача параметров для этих методов должна осуществляться через URL (path или query-параметры), что соответствует RESTful-практикам и обеспечивает кэшируемость запросов.