Ich habe Probleme, eine bestimmte Spezifikation im Standard zu finden. Ich habe einen HTTP-Client, der keinen Content-Length: 0
Header enthält, wenn ich eine PUT-Anforderung ausführe, bei der ich keinen Text angegeben habe, und einen Server, der durch solche Anforderungen verwirrt wird, und ich frage mich, welches Programm ich beschuldigen soll.
89
Antworten:
HTTP-Anforderungen haben einen Hauptteil, wenn sie einen Content-Length- oder Transfer-Encoding-Header haben ( RFC 2616 4.3 ). Wenn die Anforderung keine hat, hat sie keinen Text, und Ihr Server sollte sie als solche behandeln.
Das heißt, es ist ungewöhnlich, dass eine PUT-Anfrage keinen Body hat. Wenn ich also einen Client entwerfe, der wirklich einen leeren Body senden möchte, würde ich Content-Length: 0 übergeben. In der Tat, abhängig von der Lesart des POST und PUT-Methodendefinitionen ( RFC 2616 9.5, 9.6 ) könnte man argumentieren, dass der Körper impliziert sein muss - aber ein vernünftiger Weg, mit keinem Körper umzugehen, wäre die Annahme eines Körpers mit der Länge Null.
quelle
PUT
Anforderung im Wesentlichen darin, eine Datei auf dem Server zu erstellen oder zu aktualisieren. Und es ist nichts Unzulässiges daran, dass eine Datei leer ist, nicht wahr?Nicht die Frage beantworten, sondern behaupten, wie ich mit jaxrs häufig körperlose PUTs verwenden kann:
Beispiel für körperloses Put: Geben Sie dem Benutzer eine zusätzliche Berechtigung.
PUT / admin / users / {Benutzername} / Erlaubnis / {Erlaubnis}
quelle
Ein Body ist nach dem IETF-Standard nicht erforderlich, obwohl die Inhaltslänge 0 sein sollte, wenn kein Body vorhanden ist. Verwenden Sie die Methode, die für Ihre Arbeit geeignet ist. Wenn Sie es in Code setzen würden, gegeben
und eine entfernte Variable namens
r
.Ein Beitrag entspricht
Ein Put entspricht
und ein get ist gleichbedeutend mit
quelle
int f(int* resource, int body);
und dann würde POST aufrufenf(&r, x);
- was mit dem tun kann oder nicht,r
was der Server für angemessen hält. Aber es kann auch Sachen zurückgeben, also ... vielleicht eher soy = f(&r, x);
.Was ist PUT (im Verbsinn) auf dem Server, wenn kein Inhalt vorhanden ist? Die Spezifikation bezieht sich auf den Inhalt als "die eingeschlossene Entität", aber eine Anforderung ohne Inhalt hätte keine eingeschlossene Entität und daher nichts, was auf den Server gestellt werden könnte.
Es sei denn, Sie wollten natürlich nichts auf den Server stellen. In diesem Fall möchten Sie wahrscheinlich stattdessen ein LÖSCHEN.
quelle
Content-Length: 0
oder{ }
in JSON als Körper?Das Feld für die Inhaltslänge ist gemäß dem folgenden Abschnitt im HTTP / 1.1-Standard http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13 erforderlich
quelle