Какие HTTP-методы не должны содержать тело запроса (Body)?

Ответ

Согласно спецификации HTTP/1.1 (RFC 7231), следующие методы не должны содержать тело (Body) в запросе:

  • GET — предназначен только для запроса (получения) данных от сервера.
  • HEAD — аналогичен GET, но сервер возвращает только заголовки ответа без тела.
  • OPTIONS — запрашивает информацию о доступных методах для целевого ресурса.
  • TRACE — используется для диагностики, сервер возвращает полученный запрос в теле ответа (транслитом).

Пример запроса GET без тела:

GET /api/v1/users?role=admin HTTP/1.1
Host: example.com
Accept: application/json

Важно: Хотя некоторые серверы и клиенты могут обработать тело у этих методов, это противоречит стандарту и может привести к непредсказуемому поведению. Методы POST, PUT, PATCH и DELETE, напротив, обычно используют тело для передачи данных.

Ответ 18+ 🔞

Да ты послушай, что эти умники в RFC выдумали! Сидят, блядь, в своих башнях из слоновой кости, пишут стандарты, а потом удивляются, почему весь мир ебётся как может.

Вот смотри, есть такие методы HTTP, которые, по их задумке, должны быть святыми и непорочными — без тела запроса. Совсем, нахуй! Как будто они монахи, которым нельзя на баб смотреть.

GET — это типа «дай-ка мне глянуть». Ты приходишь в библиотеку и говоришь: «Дай книгу про Python». Ты же не начинаешь, блядь, тут же лекцию читать библиотекарше? Нет. Ты просто просишь. Вот и GET так же. Он только берёт. Никакого своего текста в запрос не суёт.

HEAD — это вообще прикол. Это как GET, но ещё более стеснительный. Он просит данные, но сам такой: «А тело ответа мне не надо, я только на заголовки посмотрю». Чудак, блядь. Но тело в запросе ему тоже не положено.

OPTIONS — это такой вежливый вопрос: «А что мне тут вообще можно делать?». Ты же не будешь, спрашивая разрешения, сразу начинать танец с бубном? Нет. Спросил — и жди ответа. Тела ему не надо.

TRACE — это вообще для параноиков. Он шлёт запрос, а сервер должен его же, блядь, вернуть обратно, как эхо. Типа: «Скажи, что я тебе только что сказал?». Какое тут тело? Ты же не будешь сам себе длинное письмо в конверт класть, чтобы его тебе же прочитали?

Вот, смотри, как выглядит правильный, приличный GET:

GET /api/v1/users?role=admin HTTP/1.1
Host: example.com
Accept: application/json

Чисто, аккуратно. Никакого лишнего дерьма. Всё в URL, всё в заголовках. Красота, ёпта!

А теперь самое весёлое. Некоторые сервера и клиенты — распиздяи конченые. Они позволяют этим методам таскать с собой тело! Ну типа: «А чё такого? Пусть несёт, мы разберёмся». Это, блядь, как прийти на собеседование с гитарой и начать играть, когда тебя просят рассказать о себе. Может, где-то и прокатит, но по правилам-то — пиздец как не по-пацански. Поведение становится непредсказуемым, один хер знает, как это обработается.

А вот POST, PUT, PATCH, DELETE — это уже рабочие лошадки. Им тело как раз и нужно. Это как принести на почту посылку (POST), заменить старый холодильник на новый (PUT), подкрутить настройки (PATCH) или, блядь, выкинуть хлам на свалку (DELETE). Без тела — никак.

Короче, запомни: если метод для получения или спрашивания — не выёбывайся, тело ему не клади. А то получишь неожиданный пиздец, и будешь потом неделю дебажить, а виноват окажешься сам, распиздяй.