wake-up-neo.com

Nutzdaten von HTTP-Anforderungsmethoden

Der Wikipedia-Eintrag auf HTTP listet die folgenden HTTP-Anforderungsmethoden auf:

  • HEAD: Fordert die Antwort an, die mit der Antwort identisch ist, die einer GET-Anforderung entsprechen würde, jedoch ohne den Antworttext.
  • GET: Fordert eine Darstellung der angegebenen Ressource an.
  • POST: Sendet zu verarbeitende Daten (z. B. aus einem HTML-Formular) an die identifizierte Ressource. Die Daten sind im Hauptteil der Anforderung enthalten.
  • PUT: Lädt eine Darstellung der angegebenen Ressource hoch.
  • DELETE: Löscht die angegebene Ressource.
  • TRACE: Gibt die empfangene Anforderung zurück, sodass ein Client sehen kann, welche (eventuellen) Änderungen oder Ergänzungen von Zwischenservern vorgenommen wurden.
  • OPTIONEN: Gibt die HTTP-Methoden zurück, die der Server für die angegebene URL unterstützt. Hiermit können Sie die Funktionalität eines Webservers überprüfen, indem Sie anstelle einer bestimmten Ressource '*' anfordern.
  • CONNECT: Konvertiert die Anforderungsverbindung in einen transparenten TCP/IP-Tunnel, um normalerweise die SSL-verschlüsselte Kommunikation (HTTPS) über einen unverschlüsselten HTTP-Proxy zu ermöglichen.
  • PATCH: Wird verwendet, um partielle Änderungen an einer Ressource vorzunehmen.

Ich interessiere mich für Folgendes (speziell in Bezug auf die ersten fünf Methoden):

  • Welche dieser Methoden können (sollen?) Nutzdaten empfangen
    • der Methoden, die Nutzdaten empfangen können, wie erhalten sie diese?
      • über Abfragezeichenfolge in URL?
      • über URL-verschlüsselten Körper?
      • über rohen/stückigen Körper?
      • über eine Kombination von ([all/some] of) the above?

Ich freue mich über jeden Input, wenn Sie etwas (vorzugsweise leichtes) Lesen teilen könnten, wäre das auch großartig!

66
Alix Axel

RFC 7231 , HTTP 1.1-Semantik und -Inhalt, ist die aktuellste und maßgebliche Quelle für die Semantik der HTTP-Methoden. Diese Spezifikation besagt, dass es keine definierte Bedeutung für eine Nutzlast gibt, die in einer GET-, HEAD-, OPTIONS- oder CONNECT-Nachricht enthalten sein kann. Abschnitt 4.3.8 besagt, dass der Client keinen Body für eine TRACE-Anfrage senden darf. Daher kann nur TRACE keine Nutzdaten haben, GET, HEAD, OPTIONS und CONNECT jedoch wahrscheinlich nicht, und es wird nicht erwartet, dass der Server weiß, wie er damit umgehen soll, wenn der Client eine sendet (was bedeutet, dass er sie ignorieren kann).

Wenn Sie glauben, dass etwas nicht eindeutig ist, gibt es eine Mailingliste , wo Sie Ihre Bedenken äußern können.

28
Darrel Miller

Hier ist die Zusammenfassung von RFC 7231 , eine aktualisierte Version des Links @ Darrel gepostet:

  • [~ # ~] head [~ # ~] - Keine definierte Körpersemantik.
  • [~ # ~] get [~ # ~] - Keine definierte Körpersemantik.
  • [~ # ~] legte [~ # ~] - Körper unterstützt.
  • [~ # ~] Beitrag [~ # ~] - Körper unterstützt.
  • [~ # ~] delete [~ # ~] - Keine definierte Körpersemantik.
  • [~ # ~] trace [~ # ~] - Body not unterstützt.
  • [~ # ~] Optionen [~ # ~] - Körper unterstützt, aber keine Semantik bei der Verwendung (möglicherweise in der Zukunft).
  • [~ # ~] connect [~ # ~] - Keine definierte Körpersemantik

Wie @ John auch erwähnt, unterstützen alle Anforderungsmethoden Abfragezeichenfolgen in der URL (eine bemerkenswerte Ausnahme können [~ # ~] Optionen [~ # ~] , was [in meinen Tests] nur dann nützlich zu sein scheint, wenn die URL Host/*) lautet.

Ich habe die [~ # ~] -Verbindung [~ # ~] und [~ # ~] nicht getestet Patch [~ # ~] Methoden, da ich kein Interesse an ihnen ATM haben.

83
Alix Axel

Ich bin mir ziemlich sicher, dass nicht klar ist, ob GET-Anforderungen Nutzdaten enthalten können. GET-Anforderungen senden im Allgemeinen Formulardaten über die Abfragezeichenfolge. Dies gilt auch für HEAD Anforderungen. HEAD ist im Wesentlichen GET - es wird jedoch kein Antworttext benötigt.

(Randnotiz: Ich sage, es ist nicht klar, weil eine GET-Anfrage technisch auf ein anderes Protokoll aktualisiert werden könnte. Tatsächlich hat eine Version von Websockets genau dies getan, und während einige Proxy-Software gut damit funktionierten, haben andere beim Handshake geschockt.)

POST hat im Allgemeinen einen Körper. Nichts hindert Sie daran, eine Abfragezeichenfolge zu verwenden, aber der Textkörper POST enthält im Allgemeinen Formulardaten in einem POST.

Für mehr (und detailliertere) Informationen würde ich die aktuellen HTTP/1.1-Spezifikationen treffen.

3
John Chadwick