Какие основные форматы данных можно передать в теле HTTP-запроса?

Ответ

Формат данных в HTTP-запросе определяется заголовком Content-Type. Основные форматы:

Формат MIME-тип Использование Пример тела запроса
JSON application/json REST API, обмен структурированными данными. {"user": {"name": "Alice", "id": 123}}
Form Data (URL-encoded) application/x-www-form-urlencoded Отправка простых пар «ключ-значение» из HTML-форм. username=alice&password=secret
Multipart Form Data multipart/form-data Отправка файлов вместе с текстовыми полями. (Содержит границы для разделения частей)
XML application/xml, text/xml SOAP-сервисы, legacy системы. <request><user>Alice</user></request>
Plain Text text/plain Передача простого текста. Hello, server!
Binary Data application/octet-stream, image/png, etc. Загрузка файлов (изображений, PDF). (Байтовый поток)

Пример отправки JSON через curl:

curl -X POST https://api.example.com/users 
  -H "Content-Type: application/json" 
  -d '{"name": "Alice", "role": "developer"}'

Почему важен Content-Type: Сервер использует этот заголовок, чтобы правильно распарсить (parse) тело запроса. Неверный тип может привести к ошибке 415 Unsupported Media Type.

Ответ 18+ 🔞

А, слушай, вот это тема! Сидишь ты такой, пишешь свой API, а потом приходит какой-нибудь горе-разработчик и начинает слать тебе данные в таком формате, что у сервера глаза на лоб лезут. Всё упирается в одну простую, но архиважную хуйню — заголовок Content-Type. Без него сервер — как слепой кот в подвале: ты ему в миску суёшь то вискас, то доширак, а он нихуя не понимает, что делать.

Вот смотри, основные форматы, с которыми ты столкнёшься:

Формат MIME-тип Когда юзать Пример тела
JSON application/json Почти везде, блядь. REST API, мобилки, фронтенд — царь и бог. {"user": {"name": "Alice", "id": 123}}
Form Data (URL-encoded) application/x-www-form-urlencoded Старые-добрые HTML-формы. Простые парочки «ключ=значение». username=alice&password=secret
Multipart Form Data multipart/form-data Когда нужно отправить файл. Картинку, документ, порноролик — что угодно, вместе с текстом. (Там своя магия с границами, boundary)
XML application/xml, text/xml Для дедов, которые до сих пор на SOAP сидят. Легаси системы, ёпта. <request><user>Alice</user></request>
Plain Text text/plain Ну, просто текст. «Привет, сервак, как дела?». Hello, server!
Binary Data application/octet-stream, image/png и т.д. Чистые байты. Картинка, PDF, ебучий исполняемый файл. (Поток байтов, нихуя не понятно)

Вот тебе живой пример, как отправить JSON через curl, чтобы не выглядеть конченым идиотом:

curl -X POST https://api.example.com/users 
  -H "Content-Type: application/json" 
  -d '{"name": "Alice", "role": "developer"}'

Видишь этот -H "Content-Type: application/json"? Это и есть волшебный пинок под серверный зад, который сообщает: «Эй, дружок-пирожок, я тебе сейчас подсуну данные в формате JSON, будь добр, распарсь их правильно, а не как попало».

А теперь, блядь, главное: если ты этот заголовок забудешь или поставишь ерунду (например, отправишь JSON, а в Content-Type укажешь text/plain), сервер может просто послать тебя нахуй с ошибкой 415 Unsupported Media Type. Мол, «я такое не жую, иди отсюда». И будет прав, потому что он не телепат, ёпта! Он должен понимать, как разобрать твою кашу. Так что не будь мудаком — всегда указывай тип контента. Всё просто, как три копейки.