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