400 BAD request code d'erreur HTTP sens?
J'ai un JSON demande qui je suis l'affichage d'une URL HTTP.
Cela devrait-il être traité comme 400
où requestedResource
champ existe, mais "Roman"
est une valeur non valide pour ce domaine?
[{requestedResource:"Roman"}]
Cela devrait-il être traité comme 400
où "blah"
champ n'existe pas du tout?
[{blah:"Roman"}]
- Peut-être que 402, si ils veulent vraiment être en mesure d'envoyer la valeur
Roman
, ils ont juste besoin de payer plus 🙂 - Un véritable scénario où je l'ai vu - j'ai fait un appel de PUT ajouter des données. J'ai fait un appel de put de nouveau en utilisant le même corps de la requête et a obtenu un 400 qui m'a dit qu'une demande antérieure est déjà traitée. Ses normal que notre système afin de prendre un peu de temps pour ajouter des données.
Vous devez vous connecter pour publier un commentaire.
400 signifie que la demande a été mal formé. En d'autres termes, le flux de données envoyé par le client pour le serveur n'a pas suivi les règles.
Dans le cas d'une API REST avec une charge utile JSON, 400 sont généralement, et bien, je dirais, utilisé pour indiquer que le JSON n'est pas valide d'une certaine façon en fonction de la spécification de l'API pour le service.
Par cette logique, tant les scénarios que vous avez fournie devraient être 400.
Imaginer à la place de ce ont été XML plutôt que JSON. Dans les deux cas, le XML ne serait jamais passer la validation du schéma, soit à cause d'un élément indéfini ou une mauvaise valeur de l'élément. Ce serait un mauvais demande. Même problème ici.
De w3.org
De la sélection d'un code de réponse HTTP est tout à fait une tâche facile et ne peuvent être décrites par des règles simples. La seule partie délicate qui est souvent oublié, c'est le paragraphe 6.5 de la RFC 7231:
Règles sont les suivantes:
Donc dans votre cas, je serais retourné erreur 400 et quelque chose comme si ce "Roman" est obtenu à partir de la saisie de l'utilisateur et le client doit disposer d'réaction spécifique:
ou une erreur plus générique, si une telle situation est une mauvaise erreur de logique dans un client et n'est pas prévu, à moins que le développeur fait quelque chose de mal:
Dans les deux cas, est la syntaxe "mal formé". C'est la sémantique qui est faux. Donc, à mon humble avis un 400 est inapproprié. Au lieu de cela, il conviendrait de revenir un 200 avec une sorte d'objet d'erreur comme
{ "error": { "message": "Unknown request keyword" } }
ou quoi que ce soit.Considèrent le client de traitement de chemin(s). Une erreur dans la syntaxe (par exemple, invalid JSON) est une erreur dans la logique du programme, en d'autres termes d'un bug de la sorte, et devraient être traités en conséquence, dans une manière semblable à une 403, dire; en d'autres termes, quelque chose de mauvais s'est mal passé.
Une erreur dans la valeur d'un paramètre, d'autre part, est une erreur de sémantique, peut-être dû à dire mal validé la saisie de l'utilisateur. Ce n'est pas une erreur HTTP (bien que je suppose que cela pourrait être un 422). Le traitement serait différent.
Par exemple, en jQuery, je préférerais ne pas avoir à écrire une seule gestionnaire d'erreur, qui traite à la fois des choses comme les 500 et quelques spécifiques à l'application erreur sémantique. D'autres cadres, la Braise pour un, également traiter les erreurs HTTP, comme 400 et 500 à l'identique comme big fat échecs, nécessitant le programmeur à détecter ce qui se passe et de la direction générale selon qu'il est un "vrai" erreur ou pas.
À l'aide de
400
les codes d'état pour tout autre but que d'indiquer que la demande est mal formé est tout simplement faux.Si la demande de la charge utile contient un octet de la séquence qui n'a pas pu être analysée comme
application/json
(si le serveur s'attend à ce que format), le code d'état est415
:Si la demande de la charge utile est syntaxiquement correct, mais sémantiquement incorrect, le non-standard
422
code de réponse peuvent être utilisées, ou la norme403
code d'état:image/gif
au lieu detext/json
dans leContent-Type:
en-tête. - sans doute, ceci est aussi valable si un composant de type multipart, qui a le mauvais type spécifié, voir tools.ietf.org/html/rfc4918 où il traite de 422 pour une discussion plus approfondie,Penser attentes.
En tant que client de l'app, vous vous attendez à savoir si quelque chose va mal sur le côté serveur. Si le serveur doit lever une erreur lors de l'
blah
est manquant ou lerequestedResource
valeur est incorrecte qu'une erreur 400 serait approprié.D'abord de vérifier l'URL, il peut se tromper, si elle est correcte, vérifier le corps de la requête qui vous envoient, la cause possible est la demande que vous envoyez est manquant droit de la syntaxe.
D'élaborer , de vérifier les caractères spéciaux dans la chaîne de demande. Si c'est (char spécial) utilisé c'est la cause de cette erreur.
essayer de la copie de la demande et à l'analyse de chaque et toutes les données des balises.
Comme un complément, pour ceux qui pourraient rencontrer le même problème que le mien, je suis en utilisant
$.ajax
pour valider les données du formulaire au serveur et j'ai aussi eu la400
erreur au premier abord.Supposons que j'ai une variable javascript,
Ne pas utiliser de variable
formData
directement comme valeur de clédata
comme ci-dessous:Au lieu de cela, l'utilisation de JSON.stringify à encapsuler les
formData
comme ci-dessous:De toute façon, comme d'autres l'ont illustré, l'erreur est parce que le serveur n'a pas pu reconnaître la demande de cause la malformation de la syntaxe, je suis juste lever un exemple à la pratique. Espérons qu'il serait utile à quelqu'un.