web-dev-qa-db-fra.com

Codes d'erreur HTTP 406 et 415

J'écris un service Web qui n'accepte que json et ne produit également que json.

Je dois donc retourner le code d'état approprié si un autre format est demandé.

Il semble que j'ai deux choix:

  1. 406 - Inacceptable
  2. 415 - Type de support non pris en charge

Ce serait formidable si quelqu'un pouvait m'éclairer sur la sémantique des deux codes.

61
rmk

406 est retourné par le serveur lorsqu'il ne peut pas répondre en acceptant les en-têtes de demande (c'est-à-dire qu'ils ont un en-tête Accept qui indique qu'ils seulement veulent XML).

415 est retourné par le serveur lorsque l'entité a envoyé une demande (le contenu dans un POST ou PUT) a un type de support non pris en charge (c'est-à-dire qu'ils ont envoyé du XML).

donc .. 406 quand vous ne pouvez pas envoyer ce qu'ils veulent, 415 quand ils envoient ce que vous ne voulez pas.

J'espère que cela pourra aider!

122
nathan
  • 406 si un en-tête Accept a été envoyé, vous ne pouvez pas remplir complètement.
  • 415 si un Content-Type est envoyé, vous ne pouvez pas l'utiliser.
37
Wrikken

Pour citer RFC2616 :

406 Non acceptable

La ressource identifiée par la demande est uniquement capable de générer des entités de réponse dont les caractéristiques de contenu ne sont pas acceptables selon les en-têtes d'acceptation envoyés dans la demande.

Lorsqu'un client interroge votre service, vérifiez ce que Accept* en-têtes envoyés; s'il ne correspond pas à application/json (ou un caractère générique, par exemple */*), retournez ceci. La réponse doit indiquer "nous ne servons que du JSON ici".

415 Type de support non pris en charge

Le serveur refuse de traiter la demande car l'entité de la demande est dans un format non pris en charge par la ressource demandée pour la méthode demandée.

Je reviens juste 415 Unsupported Media Type devrait être la réponse minimale pour "le client a envoyé quelque chose qui n'est pas JSON, ne peut pas travailler avec ça"; Je ne sais pas s'il y a un en-tête pour indiquer "vous devez envoyer JSON"

7
Piskvor

406 est utilisé lorsque le client demande une réponse dans un type de contenu non pris en charge (dans votre cas, autre que JSON) à l'aide de l'en-tête Accept. 415 d'autre part est utilisé lorsque les données POST ou PUT du client dans un type de contenu non pris en charge.

En un mot: utilisez 406 si vous ne pouvez pas sortir au format attendu et utilisez 415 si vous ne supportez pas le format d'entrée.

Voir RFC 2616 pour leurs définitions: 406 et 415

4
Victor Welling