HTTPQUERY
Français

415 Unsupported Media Type

Utilisation

Lorsque le message d’erreur 415 Unsupported Media Type est reçu, la cause est souvent le rejet par le serveur des en-têtes Content-Type ou Content-Encoding. Le serveur peut aussi renvoyer cette erreur après un examen plus poussé du corps du message.

Dans ce dernier cas, le serveur signale cette erreur parce que l’analyse ou la reconnaissance du contenu a échoué. Lorsque le serveur reconnaît le type de média mais ne prend pas en charge le format, 415 Unsupported Media Type est la réponse la plus exacte. Lorsque le contenu comporte des erreurs structurelles, 400 ou 422 sont plus appropriés.

Cette erreur ressemble à 406, à ceci près que 415 Unsupported Media Type se fonde sur les en-têtes Content-Type et Content-Encoding plutôt que sur l’en-tête Accept.

Impact SEO

Les moteurs de recherche comme Google n’indexent pas une URL dont la réponse a le statut 415. Les URL précédemment indexées sont retirées des résultats de recherche.

Exemple

Le client veut envoyer un message en texte brut, mais le serveur renvoie 415 Unsupported Media Type parce que seuls les messages HTML sont acceptés. Le client modifie ensuite l’en-tête Content-Type sans toucher au message d’origine. Le serveur constate que le corps n’est pas du HTML valide et refuse la requête une seconde fois.

Requête initiale

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

Good morning, Everybody!

Réponse initiale, fondée sur l’en-tête 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>

Requête suivante tentant de contourner la validation

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

Good morning, Everybody!

Réponse suivante, fondée sur l’inspection du corps du message

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>

Comment corriger

Vérifiez que l’en-tête Content-Type correspond à un format accepté par le serveur. La documentation de l’API liste généralement les types de média pris en charge. Les valeurs courantes sont application/json, application/xml, multipart/form-data et application/x-www-form-urlencoded.

Le contenu du corps doit correspondre au Content-Type déclaré. Envoyer du texte brut avec Content-Type: application/json échoue, car le serveur tente d’analyser le corps comme du JSON. Certains serveurs sont stricts sur la notation du jeu de caractères : charset=UTF8 au lieu de charset=UTF-8 déclenche un rejet sur certaines plateformes.

Vérifiez l’en-tête Content-Encoding lors de l’envoi de données compressées. Un écart entre l’encodage déclaré (par exemple gzip) et le format de compression réel du corps produit un 415.

Pour les téléversements de fichiers, confirmez que le type de fichier figure dans la liste d’autorisation du serveur. Les serveurs restreignent souvent les téléversements à des formats précis comme JPEG, PNG ou PDF.

Erreurs courantes dans les clients d’API REST :

Tester la requête avec un outil comme Postman ou curl permet de déterminer si le problème se situe dans le code applicatif ou dans la requête elle-même. Postman définit automatiquement l’en-tête Content-Type lorsqu’un type de corps est sélectionné.

Références de code

.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