Ошибка 415 Unsupported Media Type
Что означает HTTP 415 Unsupported Media Type и как проверить Content-Type, фактический body, multipart boundary, Content-Encoding, gateway и контракт API.

HTTP 415 Unsupported Media Type означает, что сервер отказывается принять содержимое запроса из-за неподдерживаемого формата представления. Чаще всего причина находится в Content-Type, реальном формате body, charset, multipart boundary или Content-Encoding.
Типичный сценарий: endpoint ожидает JSON, а клиент отправляет form data или указывает Content-Type: application/json, хотя тело фактически не является JSON.
Что означает HTTP 415
клиент
↓ Content-Type + body
сервер
↓
поддерживает этот media type?
├─ нет → 415
└─ да → parsing / validation

RFC 9110 связывает 415 с неподдерживаемым форматом содержимого запроса. Причиной может быть как Content-Type, так и Content-Encoding либо фактическая обработка содержимого.
415, 400 и 422
| Код | Пример |
|---|---|
400 Bad Request | JSON сломан синтаксически |
415 Unsupported Media Type | endpoint не принимает указанный media type |
422 Unprocessable Content | JSON разобран, но значения семантически недопустимы |
См. также: Ошибка 400 Bad Request и Ошибка 422 Unprocessable Content.
Причина 1. Неверный Content-Type
Endpoint ожидает:
Content-Type: application/json
а клиент отправляет:
Content-Type: text/plain
Даже если body визуально похож на JSON, сервер может корректно отклонить запрос.
Причина 2. Заголовок говорит JSON, но body другой
Плохой запрос:
Content-Type: application/json
name=Ivan&enabled=true
Header и содержимое противоречат друг другу.
Причина 3. Multipart сформирован неправильно
Для multipart/form-data boundary является частью Content-Type:
Content-Type: multipart/form-data; boundary=----ExampleBoundary
При использовании curl не стоит вручную задавать multipart Content-Type, если -F может корректно сформировать boundary сам.
curl -i -F 'file=@photo.webp' https://example.com/upload
Причина 4. Неподдерживаемый Content-Encoding
Если клиент отправил закодированное содержимое, которое сервер не умеет декодировать, 415 также может быть релевантным ответом.
Поэтому проверяйте не только Content-Type, но и:
Content-Encoding: gzip
Шаг 1. Сохраните request и response headers
curl -i \
-H 'Content-Type: application/json' \
--data-binary @request.json \
https://api.example.com/v1/items
Зафиксируйте:
- method;
- URL;
Content-Type;Content-Encoding;- response body;
- request ID.
Шаг 2. Проверьте реальный body
Для JSON:
jq . request.json
Если JSON не разбирается, проблема уже не только в media type. Если JSON валиден, но сервер всё равно отдаёт 415, сравните header с API contract.
Шаг 3. Сравните запрос с минимальным рабочим примером
Начните с самого простого request:
curl -i \
-H 'Content-Type: application/json' \
-d '{"name":"test"}' \
https://api.example.com/v1/items
Затем добавляйте отличия клиента по одному.

Так можно отделить проблему формата от авторизации, validation и бизнес-логики.
Шаг 4. Проверьте документацию endpoint
Важно знать точный контракт:
POST /v1/import
Consumes: application/json
или:
POST /v1/upload
Consumes: multipart/form-data
Не делайте вывод только из того, что соседний endpoint принимает JSON.
Шаг 5. Проверьте proxy и gateway
Иногда application поддерживает media type, но gateway policy разрешает только ограниченный набор.
Сопоставьте:
public request → 415
internal request → 2xx
Если это воспроизводится, проверяйте API gateway/WAF/proxy rules.
Шаг 6. Проверьте charset аккуратно
Media type может содержать параметры:
Content-Type: application/json; charset=UTF-8
Некоторые реализации строже других. Не добавляйте нестандартные параметры без необходимости и сверяйтесь с контрактом конкретного сервера.
415 после релиза
Частые изменения:
- frontend переключился с JSON на
FormData; - SDK начал задавать другой header;
- backend перестал принимать legacy media type;
- gateway policy стала строже;
- появился
Content-Encoding; - изменился multipart upload.
Если 415 появился только у новой версии клиента, сравнение сырого HTTP-запроса до и после релиза обычно быстро показывает причину.
Как проверить исправление
Нужен позитивный и негативный сценарий:
поддерживаемый Content-Type → обработка запроса
неподдерживаемый Content-Type → 415
валидный JSON с неверными значениями → не маскируется под 415

Так вы проверяете не только исчезновение ошибки, но и сохранение корректного API-контракта.
Автоматический мониторинг
Если критичный API принимает JSON, монитор должен отправлять реальный поддерживаемый Content-Type и валидное тело, а не только делать GET на тот же hostname.
UpWatch можно использовать для регулярной проверки API endpoint с заданным методом, body и ожидаемым ответом, если запрос безопасен для периодического выполнения.
Типичные ошибки
- менять JSON body, не проверив
Content-Type; - вручную задавать multipart boundary;
- путать 415 и 422;
- считать 415 сетевой ошибкой;
- забывать
Content-Encoding; - смотреть только backend, когда формат блокирует gateway;
- после исправления принимать любой media type без проверки.
Практический чек-лист
- Подтвердить HTTP 415.
- Зафиксировать method и URL.
- Сохранить
Content-Type. - Проверить реальный body.
- Проверить
Content-Encoding. - Сверить API contract.
- Воспроизвести минимальным curl.
- Проверить multipart boundary.
- Проверить gateway/proxy.
- Сравнить старый и новый client request.
- Проверить позитивный media type.
- Проверить негативный media type после исправления.
Источники и спецификации
Частые вопросы
Что означает HTTP 415 Unsupported Media Type?
Сервер отклоняет содержимое запроса, потому что его media type, кодирование или фактический формат не поддерживаются для этого endpoint.
Чем 415 отличается от 400?
415 относится к неподдерживаемому формату содержимого. 400 чаще используется для общего некорректного запроса, например сломанного синтаксиса.
Чем 415 отличается от 422?
При 422 содержимое уже распознано и синтаксически корректно, но его значения невозможно обработать семантически.
Почему multipart может получать 415?
Причиной может быть неправильный Content-Type или boundary. При curl с -F обычно лучше позволить инструменту сформировать multipart Content-Type автоматически.
Как проверить исправление 415?
Отправьте поддерживаемый media type и убедитесь в штатной обработке, затем отдельно проверьте, что неподдерживаемый формат по-прежнему получает 415.
Связанные материалы

Ошибка 400 Bad Request: почему сервер отклоняет запрос
Что означает HTTP 400 Bad Request, какие ошибки запроса вызывают этот код и как по шагам проверить URL, заголовки, cookies, JSON, proxy и логи сервера.

Ошибка 422 Unprocessable Content
Что означает HTTP 422 Unprocessable Content, как отличить его от 400, 409 и 415 и как диагностировать семантические ошибки JSON, валидацию полей и бизнес-ограничения API.

Ошибка 413 Payload Too Large
Что означает HTTP 413 Payload Too Large, где ограничивается размер запроса и как диагностировать лимиты CDN, reverse proxy, веб-сервера и приложения без опасного увеличения настроек.

Как проверить API через curl
Практическое руководство по проверке API через curl: GET, POST, JSON, headers, Bearer Token, Basic Auth, HTTP-код, redirect, timeout, TLS и время ответа.

Как мониторить API endpoint
Как выбрать API endpoint для мониторинга и задать критерии успеха: HTTP-код, timeout, JSON, авторизация, безопасный запрос, частота проверки и диагностика сбоев.