HTTPQUERY
Русский

415 Unsupported Media Type

Применение

Когда приходит сообщение об ошибке 415 Unsupported Media Type, причиной чаще всего оказываются заголовки Content-Type или Content-Encoding, отклонённые сервером. Либо сервер возвращает эту ошибку по результатам более подробной проверки тела сообщения.

Во втором случае сервер сообщает об ошибке, потому что разобрать или распознать содержимое не удалось. Когда сервер распознаёт тип медиа, но не поддерживает формат, 415 Unsupported Media Type — самый точный ответ. Когда в содержимом есть структурные ошибки, уместнее 400 или 422.

Эта ошибка похожа на 406 с той разницей, что 415 Unsupported Media Type основана на заголовках Content-Type и Content-Encoding, а не на заголовке Accept.

Влияние на SEO

Поисковые системы вроде Google не индексируют URL со статусом ответа 415. Ранее проиндексированные URL будут удалены из результатов поиска.

Пример

Клиент хочет отправить сообщение в виде простого текста, но сервер возвращает 415 Unsupported Media Type, поскольку принимает только сообщения в HTML. Затем клиент меняет заголовок Content-Type, оставляя исходное сообщение без изменений. Сервер распознаёт, что тело не является корректным HTML, и отклоняет запрос во второй раз.

Первоначальный запрос

POST /blog/newmessage HTTP/1.1
Host: example.com
Content-Type: text/plain
Content-Length: 24

Good morning, Everybody!

Первоначальный ответ, основанный на заголовке Content-Type

HTTP/1.1 415 Unsupported Media Type
Content-Type: text/html
Content-Length: 138

<html>
  <head>
    <title>Unsupported Format</title>
  </head>
  <body>
   <p>Please use HTML to post new messages.</p>
  </body>
</html>

Последующий запрос, пытающийся обойти проверку

POST /blog/newmessage HTTP/1.1
Host: example.com
Content-Type: text/html
Content-Length: 24

Good morning, Everybody!

Последующий ответ, основанный на проверке тела сообщения

HTTP/1.1 415 Unsupported Media Type
Content-Type: text/html
Content-Length: 151

<html>
  <head>
    <title>Unsupported Format</title>
  </head>
  <body>
   <p>No HTML tags found. Use HTML to post messages.
   </p>
  </body>
</html>

Как исправить

Убедитесь, что заголовок Content-Type соответствует формату, который принимает сервер. В документации API обычно перечислены поддерживаемые типы медиа. Распространённые значения: application/json, application/xml, multipart/form-data и application/x-www-form-urlencoded.

Содержимое тела должно соответствовать объявленному Content-Type. Отправка простого текста с Content-Type: application/json завершится неудачей, потому что сервер попытается разобрать тело как JSON. Некоторые серверы строги к записи кодировки: charset=UTF8 вместо charset=UTF-8 на отдельных платформах приводит к отказу.

Проверяйте заголовок Content-Encoding при отправке сжатых данных. Несоответствие между объявленным кодированием (например, gzip) и фактическим форматом сжатия тела приводит к 415.

Для загрузки файлов убедитесь, что тип файла есть в списке разрешённых на сервере. Серверы часто ограничивают загрузку определёнными форматами, такими как JPEG, PNG или PDF.

Типичные ошибки в клиентах REST API:

Тестирование запроса инструментом вроде Postman или curl позволяет понять, в чём проблема — в коде приложения или в самом запросе. Postman устанавливает заголовок Content-Type автоматически, когда выбран тип тела.

Примеры кода

.NET

HttpStatusCode.UnsupportedMediaType

Rust

http::StatusCode::UNSUPPORTED_MEDIA_TYPE

Rails

:unsupported_media_type

Go

http.StatusUnsupportedMediaType

Symfony

Response::HTTP_UNSUPPORTED_MEDIA_TYPE

Python3.5+

http.HTTPStatus.UNSUPPORTED_MEDIA_TYPE

Java

java.net.HttpURLConnection.HTTP_UNSUPPORTED_TYPE

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_UNSUPPORTED_MEDIA_TYPE

Angular

@angular/common/http/HttpStatusCode.UnsupportedMediaType