Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Eine typische HTTP-Sitzung
In Client-Server-Protokollen wie HTTP bestehen Sitzungen aus drei Phasen:
- Der Client stellt eine TCP-Verbindung her (oder die entsprechende Verbindung, wenn die Transportschicht nicht TCP ist).
- Der Client sendet seine Anfrage und wartet auf die Antwort.
- Der Server verarbeitet die Anfrage, sendet seine Antwort zurück, liefert einen Statuscode und die entsprechenden Daten.
Seit HTTP/1.1 wird die Verbindung nach Abschluss der dritten Phase nicht mehr geschlossen, und dem Client wird nun eine weitere Anfrage gewährt: Dies bedeutet, dass die zweite und dritte Phase nun beliebig oft durchgeführt werden können.
In diesem Artikel
Aufbau einer Verbindung
In Client-Server-Protokollen ist es der Client, der die Verbindung aufbaut. Eine Verbindung in HTTP zu öffnen, bedeutet, eine Verbindung in der zugrunde liegenden Transportschicht zu initiieren, normalerweise ist dies TCP.
Bei TCP ist der Standardport für einen HTTP-Server auf einem Computer Port 80. Es können auch andere Ports verwendet werden, wie 8000 oder 8080. Die URL einer abzurufenden Seite enthält sowohl den Domainnamen als auch die Portnummer, wobei letzteres weggelassen werden kann, wenn es 80 ist. Siehedie URL-Referenz für weitere Details.
Hinweis:Das Client-Server-Modell erlaubt es dem Server nicht, Daten an den Client zu senden, ohne dass eine explizite Anfrage dafür vorliegt. Verschiedene Web-APIs ermöglichen jedoch diesen Anwendungsfall, einschließlich derPush-API,Server-Sent Events und derWebSockets-API.
Senden einer Client-Anfrage
Sobald die Verbindung hergestellt ist, kann der User-Agent die Anfrage senden (ein User-Agent ist typischerweise ein Webbrowser, kann aber auch etwas anderes sein, z.B. ein Crawler). Eine Client-Anfrage besteht aus Textanweisungen, die durch CRLF (Carriage Return, gefolgt von Line Feed) getrennt sind und in drei Blöcke unterteilt sind:
Die erste Zeile enthält eine Anfragemethode, gefolgt von ihren Parametern:
- der Pfad des Dokuments als absolute URL ohne Protokoll oder Domainnamen
- die HTTP-Protokollversion
Die nachfolgenden Zeilen stellen einen HTTP-Header dar, der dem Server Informationen darüber gibt, welche Art von Daten geeignet ist (zum Beispiel welche Sprache, welche MIME-Typen) oder sonstige Daten, die sein Verhalten beeinflussen (zum Beispiel keine Antwort senden, wenn sie bereits im Cache ist). Diese HTTP-Header bilden einen Block, der mit einer leeren Zeile endet.
Der letzte Block ist ein optionaler Datenblock, der möglicherweise weitere Daten enthält, die hauptsächlich von der POST-Methode verwendet werden.
Beispielanfragen
Abrufen der Root-Seite von developer.mozilla.org (https://developer.mozilla.org/) und dem Server mitteilen, dass der User-Agent die Seite bevorzugt in Französisch erhalten möchte, falls möglich:
GET / HTTP/1.1Host: developer.mozilla.orgAccept-Language: frBeachten Sie diese letzte leere Zeile, die den Datenblock vom Headerblock trennt. Da keineContent-Length in einem HTTP-Header angegeben ist, wird dieser Datenblock leer präsentiert, um das Ende der Header zu markieren und den Server zu ermöglichen, die Anfrage in dem Moment zu verarbeiten, in dem er diese leere Zeile erhält.
Zum Beispiel das Senden des Ergebnisses eines Formulars:
POST /contact_form.php HTTP/1.1Host: developer.mozilla.orgContent-Length: 64Content-Type: application/x-www-form-urlencodedname=Joe%20User&request=Send%20me%20one%20of%20your%20catalogueAnfragemethoden
HTTP definiert eine Reihe vonAnfragemethoden, die angeben, welche Aktion auf eine Ressource durchgeführt werden soll. Obwohl sie auch Substantive sein können, werden diese Anfragemethoden manchmal als HTTP-Verben bezeichnet. Die gängigsten Anfragen sindGET undPOST:
- Die
GET-Methode fordert eine Datenrepräsentation der angegebenen Ressource an. Anfragen, dieGETverwenden, sollten nur Daten abrufen. - Die
POST-Methode sendet Daten zu einem Server, damit dieser seinen Zustand ändern kann. Diese Methode wird oft fürHTML-Formulare verwendet.
Struktur einer Serverantwort
Nachdem der verbundene Agent seine Anfrage gesendet hat, verarbeitet der Webserver diese und gibt letztlich eine Antwort zurück. Ähnlich wie eine Client-Anfrage wird eine Serverantwort aus Textanweisungen gebildet, die durch CRLF getrennt sind, jedoch in drei Blöcke unterteilt:
- Die erste Zeile, dieStatuszeile, besteht aus einer Anerkennung der verwendeten HTTP-Version, gefolgt von einem Antwortstatuscode (und seiner kurzen Bedeutung in menschenlesbarem Text).
- Die nachfolgenden Zeilen stellen spezifische HTTP-Header dar, die dem Client Informationen über die gesendeten Daten geben (z. B. Typ, Datengröße, verwendetes Kompressionsverfahren, Hinweise zum Caching). Ähnlich dem Block von HTTP-Headern für eine Client-Anfrage bilden diese HTTP-Header einen Block, der mit einer leeren Zeile endet.
- Der letzte Block ist ein Datenblock, der die optionalen Daten enthält.
Beispielantworten
Erfolgreiche Webseitenantwort:
HTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Content-Length: 55743Connection: keep-aliveCache-Control: s-maxage=300, public, max-age=0Content-Language: en-USDate: Thu, 06 Dec 2018 17:37:18 GMTETag: "2e77ad1dc6ab0b53a2996dfd4653c1c3"Server: meinheld/0.6.1Strict-Transport-Security: max-age=63072000X-Content-Type-Options: nosniffX-Frame-Options: DENYX-XSS-Protection: 1; mode=blockVary: Accept-Encoding,CookieAge: 7<!doctype html><html lang="en"><head> <meta charset="utf-8"> <title>A basic webpage</title></head><body> <h1>Basic HTML webpage</h1> <p>Hello, world!</p></body></html>Meldung, dass die angeforderte Ressource dauerhaft verschoben wurde:
HTTP/1.1 301 Moved PermanentlyServer: Apache/2.4.37 (Red Hat)Content-Type: text/html; charset=utf-8Date: Thu, 06 Dec 2018 17:33:08 GMTLocation: https://developer.mozilla.org/ (this is the new link to the resource; it is expected that the user-agent will fetch it)Keep-Alive: timeout=15, max=98Accept-Ranges: bytesVia: Moz-Cache-zlb05Connection: Keep-AliveContent-Length: 325 (the content contains a default page to display if the user-agent is not able to follow the link)<!doctype html>… (contains a site-customized page helping the user to find the missing resource)Meldung, dass die angeforderte Ressource nicht existiert:
HTTP/1.1 404 Not FoundContent-Type: text/html; charset=utf-8Content-Length: 38217Connection: keep-aliveCache-Control: no-cache, no-store, must-revalidate, max-age=0Content-Language: en-USDate: Thu, 06 Dec 2018 17:35:13 GMTExpires: Thu, 06 Dec 2018 17:35:13 GMTServer: meinheld/0.6.1Strict-Transport-Security: max-age=63072000X-Content-Type-Options: nosniffX-Frame-Options: DENYX-XSS-Protection: 1; mode=blockVary: Accept-Encoding,CookieX-Cache: Error from cloudfront<!doctype html>… (contains a site-customized page helping the user to find the missing resource)Antwortstatuscodes
HTTP-Antwortstatuscodes zeigen an, ob eine spezifische HTTP-Anfrage erfolgreich abgeschlossen wurde. Antworten werden in fünf Klassen gruppiert: Informationsantworten, erfolgreiche Antworten, Weiterleitungen, Client-Fehler und Server-Fehler.