HTTP-Nachrichten

HTTP-Nachrichten sind der Weg, wie Daten zwischen einem Server und einem Client ausgetauscht werden. Es gibt zwei Arten von Nachrichten: Anfragen, die vom Client gesendet werden, um eine Aktion auf dem Server auszulösen, und Antworten, die Antwort des Servers.

Webentwickler oder Webmaster erstellen diese textuellen HTTP-Nachrichten selten selbst: Software, ein Webbrowser, Proxy oder Webserver übernimmt diese Aufgabe. Sie stellen HTTP-Nachrichten über Konfigurationsdateien (für Proxies oder Server), APIs (für Browser) oder andere Schnittstellen zur Verfügung.

Von einem Benutzer-, Skript- oder servergenerierten Ereignis wird eine HTTP/1.x-Nachricht erzeugt, und wenn HTTP/2 verwendet wird, wird sie binär in einen HTTP/2-Stream gerahmt und dann gesendet.

HTTP-Anfragen und -Antworten haben eine ähnliche Struktur und bestehen aus:

  1. Einer Startzeile, die die auszuführenden Anfragen beschreibt oder den Status, ob erfolgreich oder fehlerhaft, angibt. Dies ist immer eine einzelne Zeile.
  2. Einem optionalen Satz von HTTP-Headern, die die Anfrage spezifizieren oder den im Nachrichtenkörper enthaltenen Inhalt beschreiben.
  3. Einer Leerzeile, die anzeigt, dass alle Metainformationen für die Anfrage gesendet wurden.
  4. Einem optionalen Körper, der mit der Anfrage verbundene Daten (wie der Inhalt eines HTML-Formulars) oder das mit einer Antwort verbundene Dokument enthält. Die Anwesenheit des Körpers und seine Größe werden durch die Startzeile und die HTTP-Header spezifiziert.

Die Startzeile und die HTTP-Header der HTTP-Nachricht werden zusammen als der Head der Anfragen bezeichnet, und der danach folgende Teil, der den Inhalt enthält, wird als Body bezeichnet.

Anfragen und Antworten teilen eine gemeinsame Struktur in HTTP

HTTP-Anfragen

Anfragelinie

Hinweis: Die Startzeile wird in Anfragen als "Anfragelinie" bezeichnet.

HTTP-Anfragen sind Nachrichten, die vom Client gesendet werden, um eine Aktion auf dem Server zu initiieren. Ihre Anfragelinie enthält drei Elemente:

  1. Eine HTTP-Methode, ein Verb (wie GET, PUT oder POST) oder ein Substantiv (wie HEAD oder OPTIONS), das die auszuführende Aktion beschreibt. Zum Beispiel gibt GET an, dass eine Ressource abgerufen werden soll, oder POST bedeutet, dass Daten an den Server gesendet werden (zur Erstellung oder Änderung einer Ressource oder zur Generierung eines temporären Dokuments, das zurückgesendet wird).

  2. Das Ziel der Anfrage, in der Regel eine URL, oder der absolute Pfad des Protokolls, Ports und der Domain wird normalerweise durch den Anfragekontext charakterisiert. Das Format dieses Anfrageziels variiert zwischen verschiedenen HTTP-Methoden. Es kann sein:

    • Ein absoluter Pfad, letztlich gefolgt von einem '?' und einer Abfragezeichenfolge. Dies ist die häufigste Form, bekannt als die Ursprungsform, und wird mit den Methoden GET, POST, HEAD und OPTIONS verwendet.
      • POST / HTTP/1.1
      • GET /background.png HTTP/1.0
      • HEAD /test.html?query=alibaba HTTP/1.1
      • OPTIONS /any-page.html HTTP/1.0
    • Eine vollständige URL, bekannt als die absolute Form, wird hauptsächlich mit GET verwendet, wenn eine Verbindung zu einem Proxy besteht. GET https://developer.mozilla.org/de/docs/Web/HTTP/Messages HTTP/1.1
    • Die Autoritätskomponente einer URL, bestehend aus dem Domainnamen und optional dem Port (eingeleitet durch ein ':'), wird als Autoritätsform bezeichnet. Sie wird nur mit CONNECT verwendet, wenn ein HTTP-Tunnel eingerichtet wird. CONNECT developer.mozilla.org:80 HTTP/1.1
    • Die Sternchenform, ein einfaches Sternchen ('*'), wird mit OPTIONS verwendet und repräsentiert den Server als Ganzes. OPTIONS * HTTP/1.1
  3. Die HTTP-Version, die die Struktur der verbleibenden Nachricht definiert und als Indikator für die erwartete zu verwendende Version für die Antwort dient.

HTTP-Header einer Anfrage folgen dem gleichen Grundaufbau eines HTTP-Headers: ein nicht case-sensitiver String gefolgt von einem Doppelpunkt (':') und einem Wert, dessen Struktur vom Header abhängt. Der gesamte Header, einschließlich des Werts, besteht aus einer einzigen Zeile, die ziemlich lang sein kann.

Viele verschiedene Header können in Anfragen erscheinen. Diese können in mehrere Gruppen unterteilt werden:

Beispiel für Header in einer HTTP-Anfrage

Körper

Der letzte Teil einer Anfrage ist der Körper. Nicht alle Anfragen haben einen: Anfragen mit einer GET HTTP-Methode sollten nur zum Anfordern von Daten verwendet werden und keinen Körper enthalten.

Körper können grob in zwei Kategorien unterteilt werden:

HTTP-Antworten

Statuszeile

Hinweis: Die Startzeile wird in Antworten als "Statuszeile" bezeichnet.

Die Startzeile einer HTTP-Antwort, die Statuszeile genannt wird, enthält folgende Informationen:

  1. Die Protokollversion, normalerweise HTTP/1.1, aber es kann auch HTTP/1.0 sein.
  2. Ein Statuscode, der den Erfolg oder Misserfolg der Anfrage angibt. Gängige Statuscodes sind 200, 404 oder 302.
  3. Ein Status-Text. Eine kurze, rein informative, textuelle Beschreibung des Statuscodes, um einem Menschen zu helfen, die HTTP-Nachricht zu verstehen.

Eine typische Statuszeile sieht so aus: HTTP/1.1 404 Not Found.

Header

HTTP-Header für Antworten folgen der gleichen Struktur wie jeder andere Header: ein nicht case-sensitiver String gefolgt von einem Doppelpunkt (':') und einem Wert, dessen Struktur vom Typ des Headers abhängt. Der gesamte Header, einschließlich seines Werts, präsentiert sich als eine einzelne Zeile.

Viele verschiedene Header können in Antworten erscheinen. Diese können in mehrere Gruppen unterteilt werden:

Beispiel für Header in einer HTTP-Antwort

Körper

Der letzte Teil einer Antwort ist der Körper. Nicht alle Antworten haben einen: Antworten mit einem Statuscode, der die Anfrage ausreichend beantwortet, ohne dass Inhalt inkludiert werden muss (wie 201 Created oder 204 No Content), haben in der Regel keinen.

Körper können grob in drei Kategorien unterteilt werden:

  • Einzelressourcen-Körper, bestehend aus einer einzelnen Datei bekannter Länge, definiert durch die zwei Header: Content-Type und Content-Length.
  • Einzelressourcen-Körper, bestehend aus einer einzelnen Datei unbekannter Länge, kodiert in Chunks mit Transfer-Encoding auf chunked gesetzt.
  • Mehrfachressourcen-Körper, bestehend aus einem mehrteiligen Körper, der jeweils unterschiedliche Abschnitte von Informationen enthält. Diese sind relativ selten.

HTTP/2 Rahmen

HTTP/1.x-Nachrichten haben einige Nachteile in Bezug auf die Leistung:

  • Header, im Gegensatz zu Körpern, sind unkomprimiert.
  • Header sind oft sehr ähnlich von einer Nachricht zur nächsten, werden aber dennoch über Verbindungen hinweg wiederholt.
  • Obwohl HTTP/1.1 Pipelining hat, wird es in den meisten Browsern nicht standardmäßig aktiviert und erlaubt keine Multiplexierung (d. h., gleichzeitiges Senden von Anfragen). Es müssen mehrere Verbindungen zum gleichen Server geöffnet werden, um Anfragen gleichzeitig zu senden; und warme TCP-Verbindungen sind effizienter als kalte.

HTTP/2 führt einen zusätzlichen Schritt ein: Es teilt HTTP/1.x-Nachrichten in Rahmen, die in einen Stream eingebettet sind. Daten- und Header-Rahmen sind getrennt, was eine Header-Kompression ermöglicht. Mehrere Streams können zusammen kombiniert werden, ein Prozess, der Multiplexing genannt wird, der eine effizientere Nutzung der zugrundeliegenden TCP-Verbindungen ermöglicht.

HTTP/2 modifiziert die HTTP-Nachricht, indem sie in Rahmen unterteilt wird (Teil eines einzigen Streams), was mehr Optimierung ermöglicht.

HTTP-Rahmen sind nun für Webentwickler transparent. Dies ist ein zusätzlicher Schritt in HTTP/2, zwischen HTTP/1.1-Nachrichten und dem darunterliegenden Transportprotokoll. Es sind keine Änderungen in den von Webentwicklern verwendeten APIs erforderlich, um HTTP-Rahmen zu nutzen; wenn sowohl im Browser als auch im Server verfügbar, wird HTTP/2 aktiviert und verwendet.

Schlussfolgerung

HTTP-Nachrichten sind der Schlüssel zur Nutzung von HTTP; ihre Struktur ist einfach und sie sind hochgradig erweiterbar. Der HTTP/2-Rahmenmechanismus fügt eine neue Zwischenebene zwischen der HTTP/1.x-Syntax und dem zugrunde liegenden Transportprotokoll hinzu, ohne es grundlegend zu ändern: er baut auf bewährten Mechanismen auf.