382 Stimmen

400 Schlechte Anforderung. Was bedeutet der HTTP-Fehlercode?

Ich habe eine JSON-Anfrage, die ich an eine HTTP-URL poste.

Sollte dies als 400 behandelt werden, wenn das requestedResource-Feld vorhanden ist, aber "Roman" ein ungültiger Wert für dieses Feld ist?

[{requestedResource:"Roman"}] 

Sollte dies als 400 behandelt werden, wenn das "blah"-Feld überhaupt nicht existiert?

[{blah:"Roman"}]

10voto

film42 Punkte 1095

Denken Sie über Erwartungen nach.

Als Client-App erwarten Sie zu wissen, wenn auf der Serverseite etwas schief geht. Wenn der Server einen Fehler werfen muss, wenn blah fehlt oder der Wert von requestedResource falsch ist, dann wäre ein 400-Fehler angemessen.

8voto

Jo Kemp Punkte 211

Dies erinnert mich an einen üblichen Dialog mit anderen: "Ich verstehe - ich stimme einfach nicht zu"

400 bedeutet, dass der Server nicht verstanden hat

200 bedeutet, dass der Server die Anfrage genau verstanden und vollständig verarbeitet hat.

Wenn ein Server 200 zurückgibt, sagt er: "Ich habe verstanden, wonach du fragst, habe es ohne unerwartete Fehler verarbeitet und hier ist meine angemessene Antwort"

200 bedeutet, dass du der Antwort im Response vertrauen kannst. Vielleicht lautet die Antwort "Römer nicht gestattet", aber dennoch ist es eine angemessene Antwort, generiert ohne unerwartete Probleme.

200 drückt keine Informationen über erwartete Fehler oder behandelte Ausnahmen aus - denn das ist kein Teil des Nachrichtentransportprozesses. Dies sind Statuscodes über HTTP, den Status des Transports selbst.

Ich bin der Meinung, dass die Unterscheidung zwischen "Transport/Kommunikation" und "Verarbeitung" vermieden werden sollte.

Für diejenigen, die bevorzugen, dass HTTP-Codes Probleme bei der Verarbeitung anzeigen (der Teil "Ich stimme nicht zu"), scheint 409 Conflict am ehesten auf "Römer nicht gestattet" zuzutreffen
RFC 7231 409 Conflict

Konflikt bedeutet im Grunde genommen "Fehlen einer Übereinkunft", oder?

Unabhängig davon, für welchen HTTP-Antwortcode du dich entscheidest, sind sich alle einig, dass deine Antwort erklären sollte, warum sie fehlgeschlagen ist, und was zu tun ist, um das Problem zu lösen. Im Fall von Römern könntest du vielleicht eine Liste akzeptabler Werte für das Feld zurückgeben?

7voto

Ankur Bhutani Punkte 2857

Zuerst überprüfen Sie die URL, sie könnte falsch sein. Wenn sie korrekt ist, überprüfen Sie den Anforderungstext, den Sie senden. Die mögliche Ursache ist, dass die Anforderung, die Sie senden, die richtige Syntax fehlt.

Zur Verdeutlichung: Überprüfen Sie nach Sonderzeichen im Anforderungstext. Wenn ein solches verwendet wird, ist dies die Ursache dieses Fehlers.

Versuchen Sie, die Anfrage zu kopieren und analysieren Sie die Daten jedes einzelnen Tags.

6voto

Eugene Punkte 9467

Als Ergänzung, für diejenigen, die möglicherweise auf dasselbe Problem wie ich stoßen, verwende ich $.ajax, um Formulardaten an den Server zu senden, und ich habe zuerst den Fehler 400 erhalten.

Annehmen, ich habe eine JavaScript-Variable,

var formData = {
    "name":"Gearon",
    "hobby":"Anders sein"
    }; 

Verwenden Sie die Variable formData nicht direkt als Wert des Schlüssels data wie unten:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: formData,
    success: function(data, textStatus){
        alert("Daten: " + data + "\nStatus: " + status); 
    }
});

Verwenden Sie stattdessen JSON.stringify, um die formData zu umschließen, wie unten gezeigt:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: JSON.stringify(formData),
    success: function(data, textStatus){
        alert("Daten: " + data + "\nStatus: " + status); 
    }
});

Wie andere bereits dargestellt haben, liegt der Fehler darin, dass der Server die Anforderung aufgrund eines fehlerhaften Syntax nicht erkennen konnte. Ich gebe nur ein Beispiel aus der Praxis an. Hoffentlich ist es für jemanden hilfreich.

0voto

In meinem Fall bedeutete dies, dass die Daten, die ich in JSON bereitgestellt habe, nicht mit den erforderlichen Daten für die Datenbank kompatibel waren, beispielsweise war die E-Mail-Adresse bereits in der Datenbank hinzugefügt und dann wirft es den Code 400

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X