415 Unsupported Media Type : le format du corps de la requête est incorrect

415 Unsupported Media Type : le serveur refuse le corps de la requête à cause de son format, souvent un en-tête Content-Type absent ou incorrect.

Vérifier le code d’état d’une URL

415 Unsupported Media Type signifie que le serveur n’accepte pas le corps de la requête à cause de son format. Vous avez envoyé des données de formulaire à un point d’accès qui attend du JSON, oublié l’en-tête Content-Type, ou utilisé une compression que le serveur ne sait pas décoder.

Définition

La RFC 9110, section 15.5.16 indique que le problème peut venir du Content-Type de la requête, de son Content-Encoding, ou de l’inspection directe des données par le serveur. Quand la cause est un codage de contenu non pris en charge, la réponse devrait inclure un en-tête Accept-Encoding listant les codages acceptés. Pour PATCH, la RFC 5789 définit Accept-Patch pour lister les formats de correctif pris en charge.

Ne le confondez pas avec 406 Not Acceptable : le 415 concerne ce que le client envoie, le 406 ce qu’il accepte de recevoir.

Causes courantes

  • Un Content-Type absent ou incorrect, comme application/x-www-form-urlencoded ou text/plain envoyé à une API JSON. Des frameworks comme Spring et ASP.NET Core les rejettent avec un 415.
  • Un envoi de fichier dans un type que le point d’accès n’accepte pas.
  • Un corps de requête compressé en gzip envoyé à un serveur qui ne décompresse pas les requêtes.
  • Des appels JavaScript fetch() qui envoient JSON.stringify(data) sans définir l’en-tête, si bien que le corps part en text/plain.

Comment le corriger

# curl : déclarer le corps JSON
curl -X POST https://api.example.com/v1/contacts \
  -H 'Content-Type: application/json' \
  -d '{"email":"sara@example.com"}'

// fetch()
fetch('/api/v1/contacts', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ email: 'sara@example.com' })
});

Côté serveur, renvoyez un message qui nomme les types acceptés, afin que les intégrateurs corrigent vite leur appel.

Impact SEO

Les robots n’envoient pas de corps de requête : le 415 n’a donc aucun effet direct sur l’indexation. Il apparaît pourtant dans le travail SEO via les API : soumettre des URL à IndexNow par POST, par exemple, exige un corps JSON avec le bon en-tête, ce que l’outil d’envoi IndexNow gère pour vous. Si une page ordinaire renvoie 415 à un GET, c’est un bogue du serveur ; Google le traiterait comme un 4xx et retirerait la page. Contrôlez vos pages avec le vérificateur de statut HTTP.

Exemple

POST /api/v1/contacts HTTP/1.1
Host: api.example.com
Content-Type: text/plain

email=sara@example.com

HTTP/1.1 415 Unsupported Media Type
Content-Type: application/json

{"error":"Expected Content-Type: application/json"}

Questions fréquentes

Quelle est la différence entre 415 et 400 ?

400 est un message général : « cette requête est mal formée ». 415 est précis : le serveur ne sait pas traiter le format du corps que vous avez envoyé, en général à cause de l’en-tête Content-Type.

Comment corriger une erreur 415 dans fetch ou Postman ?

Définissez l’en-tête Content-Type en accord avec le corps, en général application/json pour du JSON, et vérifiez que le corps est bien dans ce format.

Une erreur 415 affecte-t-elle le SEO ?

Pas directement, puisque les robots n’envoient aucun corps de requête. Elle compte pour le travail avec les API, comme les outils de soumission d’URL, et une page qui renvoie 415 à un GET serait retirée comme n’importe quelle page 4xx.