HTTPQUERY
Español

415 Unsupported Media Type

Uso

Cuando se recibe el mensaje de error 415 Unsupported Media Type, la causa suele ser que el servidor rechaza las cabeceras Content-Type o Content-Encoding. Como alternativa, el servidor devuelve este error tras inspeccionar con más detalle el cuerpo del mensaje.

En este último caso, el servidor señala este error porque no consiguió analizar o reconocer el contenido. Cuando el servidor reconoce el tipo de medio pero no admite el formato, 415 Unsupported Media Type es la respuesta más precisa. Cuando el contenido presenta errores estructurales, 400 o 422 resultan más apropiados.

Este error se parece al 406, salvo que 415 Unsupported Media Type se basa en las cabeceras Content-Type y Content-Encoding, en lugar de en la cabecera Accept.

Impacto en SEO

Los motores de búsqueda como Google no indexan una URL cuya respuesta tenga el estado 415. Las URL indexadas previamente se eliminarán de los resultados de búsqueda.

Ejemplo

El cliente quiere enviar un mensaje en texto plano, pero el servidor devuelve 415 Unsupported Media Type porque solo acepta mensajes HTML. A continuación, el cliente cambia la cabecera Content-Type pero deja intacto el mensaje original. El servidor detecta que el cuerpo no es HTML válido y deniega la solicitud por segunda vez.

Solicitud inicial

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

Good morning, Everybody!

Respuesta inicial, basada en la cabecera 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>

Solicitud posterior que intenta eludir la validación

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

Good morning, Everybody!

Respuesta posterior, basada en la inspección del cuerpo del mensaje

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>

Cómo solucionarlo

Verifique que la cabecera Content-Type coincida con un formato que el servidor acepte. La documentación de la API suele enumerar los tipos de medio admitidos. Entre los valores habituales se encuentran application/json, application/xml, multipart/form-data y application/x-www-form-urlencoded.

El contenido del cuerpo debe coincidir con el Content-Type declarado. Enviar texto plano con Content-Type: application/json falla porque el servidor intenta analizar el cuerpo como JSON. Algunos servidores son estrictos con la notación del juego de caracteres: charset=UTF8 en lugar de charset=UTF-8 provoca un rechazo en determinadas plataformas.

Compruebe la cabecera Content-Encoding al enviar datos comprimidos. Una discrepancia entre la codificación declarada (por ejemplo, gzip) y el formato de compresión real del cuerpo produce un 415.

En las subidas de archivos, confirme que el tipo de archivo figura en la lista de permitidos del servidor. Los servidores suelen restringir las subidas a formatos concretos como JPEG, PNG o PDF.

Errores habituales en los clientes de API REST:

Probar la solicitud con una herramienta como Postman o curl permite aislar si el problema está en el código de la aplicación o en la solicitud en sí. Postman establece la cabecera Content-Type automáticamente cuando se selecciona un tipo de cuerpo.

Referencias de código

.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