031.3 Lektion 1
Zertifikat: |
Web Development Essentials |
---|---|
Version: |
1.0 |
Thema: |
031 Softwareentwicklung und Webtechnologien |
Lernziel: |
031.3 HTTP Grundlagen |
Lektion: |
1 von 1 |
Einführung
Das HyperText Transfer Protocol (HTTP) legt fest, wie ein Client den Server nach einer bestimmten Ressource fragt. Das Funktionsprinzip ist recht einfach: Der Client erstellt eine Anforderungsnachricht, in der er die benötigte Ressource identifiziert, und leitet diese Nachricht über das Netz an den Server weiter. Der HTTP-Server wiederum prüft, wo die angeforderte Ressource zu finden ist, und sendet eine Antwortnachricht an den Client zurück. Die Antwort enthält Einzelheiten über die angeforderte Ressource, gefolgt von der Ressource selbst.
Genauer gesagt handelt es sich bei HTTP um eine Reihe von Regeln, die festlegen, wie die Client-Anwendung die an den Server gesendeten Request-Nachrichten formatieren soll. Der Server folgt dann den HTTP-Regeln, um die Anfrage zu interpretieren und Reply- bzw. Response-Nachrichten zu formatieren. Neben der Anforderung oder Übertragung des angeforderten Inhalts enthalten HTTP-Nachrichten zusätzliche Informationen über den beteiligten Client und Server, über den Inhalt selbst und sogar über dessen Nichtverfügbarkeit. Kann eine Ressource nicht gesendet werden, erklärt ein Code in der Antwort den Grund für die Nichtverfügbarkeit und gibt, falls möglich, an, wohin die Ressource verschoben wurde.
Der Teil der Nachricht, der die Ressourcendetails und andere Kontextinformationen definiert, wird als Kopf oder Header der Nachricht bezeichnet. Der auf den Header folgende Teil, der den Inhalt der entsprechenden Ressource enthält, wird als Payload der Nachricht bezeichnet. Sowohl Request- als auch Response-Messages können eine Payload haben, aber in den meisten Fällen hat nur die Response-Message eine.
Die Anfrage des Clients
Die erste Phase eines HTTP-Datenaustauschs zwischen Client und Server wird vom Client initiiert, indem er eine Request-Nachricht an den Server sendet. Nehmen wir als Beispiel eine Standardaufgabe eines Browsers: das Laden einer HTML-Seite von einem Server, auf dem eine Website wie https://learning.lpi.org/en/
gehostet wird. Die Adresse, oder URL, enthält mehrere relevante Informationen — in diesem Beispiel sind es die drei folgenden:
-
Das Protokoll: HyperText Transfer Protocol Secure (
https
), eine verschlüsselte Version von HTTP. -
Der Netzwerkname des Webhosts (
learning.lpi.org
) -
Der Ort der angeforderten Ressource auf dem Server (das Verzeichnis
/en/
— in diesem Fall die englische Version der Homepage).
Note
|
Ein Uniform Resource Locator (URL) ist eine Adresse, die auf eine Ressource im Internet verweist. Diese Ressource ist in der Regel eine Datei, die von einem entfernten Server kopiert werden kann, aber URLs können auch auf dynamisch generierte Inhalte und Datenströme verweisen. |
Wie der Client die URL verarbeitet
Vor der Kontaktaufnahme mit dem Server muss der Client learning.lpi.org
in die entsprechende IP-Adresse umwandeln. Der Client verwendet einen anderen Internetdienst, das Domain Name System (DNS), um die IP-Adresse eines Hostnamens von einem oder mehreren vordefinierten DNS-Servern anzufordern. DNS-Server werden in der Regel automatisch vom Internet Service Provider (ISP) definiert.
Mit der IP-Adresse des Servers versucht der Client, sich mit dem HTTP- oder HTTPS-Port zu verbinden. Netzwerkports sind Identifikationsnummern, die das Transmission Control Protocol (TCP) definiert, um verschiedene Kommunikationskanäle innerhalb einer Client/Server-Verbindung miteinander zu verknüpfen und zu identifizieren. Standardmäßig empfangen HTTP-Server Anfragen an den TCP-Ports 80 (HTTP) und 443 (HTTPS).
Note
|
Es gibt andere Protokolle, die von Webanwendungen für die Client/Server-Kommunikation verwendet werden. Für Audio- und Videoaufrufe ist es beispielsweise sinnvoller, WebSockets zu verwenden, ein Protokoll auf niedrigerer Ebene, das für die Übertragung von Datenströmen in beide Richtungen effizienter ist als HTTP. |
Das Format der Anforderungsnachricht, die der Client an den Server sendet, ist bei HTTP und HTTPS identisch. HTTPS ist bereits weiter verbreitet als HTTP, da der gesamte Datenaustausch zwischen Client und Server verschlüsselt wird, was für die Förderung des Datenschutzes und der Sicherheit in öffentlichen Netzen unerlässlich ist. Die verschlüsselte Verbindung wird zwischen Client und Server hergestellt, noch bevor eine HTTP-Nachricht ausgetauscht wird, und zwar über das kryptografische Protokoll Transport Layer Security (TLS). Auf diese Weise wird die gesamte HTTPS-Kommunikation durch TLS gekapselt. Nach der Entschlüsselung unterscheidet sich die über HTTPS übermittelte Anfrage oder Antwort nicht mehr von einer ausschließlich über HTTP übermittelten Anfrage oder Antwort.
Das dritte Element unserer URL, /en/
, wird vom Server als Standort oder Pfad für die angeforderte Ressource interpretiert. Wenn der Pfad nicht in der URL angegeben wird, wird der Standardpfad /
verwendet. Die einfachste Implementierung eines HTTP-Servers verknüpft Pfade in URLs mit Dateien auf dem Dateisystem, auf dem der Server läuft; aber dies ist nur eine der vielen Optionen, die bei komplexeren HTTP-Servern zur Verfügung stehen.
Die Request-Nachricht
HTTP funktioniert über eine bereits aufgebaute Verbindung zwischen Client und Server, die in der Regel in TCP implementiert und mit TLS verschlüsselt ist. Sobald eine Verbindung, die den Anforderungen des Servers entspricht, hergestellt ist, kann eine von Hand in Klartext eingegebene HTTP-Anfrage die Antwort des Servers erzeugen. In der Praxis müssen Programmierer jedoch nur selten Routinen zur Erstellung von HTTP-Nachrichten implementieren, da die meisten Programmiersprachen Mechanismen zur Verfügung stellen, die die Erstellung von HTTP-Nachrichten automatisieren. Im Fall der Beispiel-URL https://learning.lpi.org/en/
hätte die einfachste mögliche Anforderungsnachricht folgenden Inhalt:
GET /en/ HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: text/html
Das erste Wort der ersten Zeile bezeichnet die HTTP-Methode. Es legt fest, welche Operation der Client auf dem Server durchführen möchte. Die GET-Methode teilt dem Server mit, dass der Client die nachfolgende Ressource anfordert: /en/
. Da sowohl der Client als auch der Server mehr als eine Version des HTTP-Protokolls unterstützen können, wird in der ersten Zeile auch die Version angegeben, die für den Datenaustausch verwendet werden soll: HTTP/1.1
.
Note
|
Die neueste Version des HTTP-Protokolls ist HTTP/2. Neben anderen Unterschieden werden die in HTTP/2 geschriebenen Nachrichten in einer binären Struktur kodiert, während die in HTTP/1.1 geschriebenen Nachrichten im Klartext gesendet werden. Durch diese Änderung werden die Datenübertragungsraten optimiert, aber der Inhalt der Nachrichten ist im Grunde derselbe. |
Der Header kann nach der ersten Zeile weitere Zeilen enthalten, um die Anfrage an den Server zu kontextualisieren und zu identifizieren. Das Header-Feld Host
zum Beispiel mag überflüssig erscheinen, da der Host des Servers offensichtlich vom Client identifiziert wurde, um die Verbindung herzustellen, und man davon ausgehen kann, dass der Server seine eigene Identität kennt. Dennoch ist es wichtig, den Host über den erwarteten Hostnamen im Request-Header zu informieren, da es üblich ist, denselben HTTP-Server für mehr als eine Website zu verwenden. (In diesem Szenario wird jeder spezifische Host als virtueller Host bezeichnet.) Daher wird das Feld Host
vom HTTP-Server verwendet, um festzustellen, auf welchen Server sich die Anfrage bezieht.
Das Header-Feld User-Agent
enthält Einzelheiten über das Client-Programm, das die Anfrage stellt. Dieses Feld kann vom Server verwendet werden, um die Antwort an die Bedürfnisse eines bestimmten Clients anzupassen, es wird jedoch häufiger verwendet, um Statistiken über die Clients zu erstellen, die den Server benutzen.
Das Feld Accept
ist von unmittelbarem Nutzen, da es den Server über das Format der angeforderten Ressource informiert. Ist dem Client das Format der Ressource gleichgültig, kann im Feld Accept
das Format */*
stehen.
Es gibt viele weitere Header-Felder, die in einer HTTP-Nachricht verwendet werden können, aber die im Beispiel gezeigten Felder reichen aus, um eine Ressource vom Server anzufordern.
Neben den Feldern im Request-Header kann der Client ergänzende Daten in die HTTP-Anfrage aufnehmen, die an den Server gesendet wird. Wenn diese Daten nur aus einfachen Textparametern im Format Name=Wert
bestehen, können sie dem Pfad der GET-Methode hinzugefügt werden. Die Parameter werden nach einem Fragezeichen in den Pfad eingebettet und durch ein kaufmännisches Und-Zeichen (&
) getrennt:
GET /cgi-bin/receive.cgi?name=LPI&email=info@lpi.org HTTP/1.1
In diesem Beispiel ist /cgi-bin/receive.cgi
der Pfad zu dem Skript auf dem Server, das die Parameter name
und email
, die aus dem Anfragepfad stammen, verarbeitet und möglicherweise verwendet. Die Zeichenkette, die den Feldern im Format name=LPI&email=info@lpi.org
entspricht, wird Query String genannt und dem Skript receive.cgi
vom HTTP-Server, der die Anfrage erhält, übergeben.
Wenn die Daten aus mehr als kurzen Textfeldern bestehen, ist es sinnvoller, sie in der Payload der Nachricht zu senden. In diesem Fall ist die HTTP-POST-Methode zu verwenden, damit der Server die Nutzdaten der Nachricht gemäß den im Request-Header angegebenen Spezifikationen erhält und verarbeitet. Bei der POST-Methode muss der Request-Header die Größe der Payload angeben, die als nächste gesendet wird, und wie der Body formatiert ist:
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org Content-Length: 1503 Content-Type: multipart/form-data; boundary=------------------------405f7edfd646a37d
Das Feld Content-Length
gibt die Größe der Nutzdaten in Bytes an und das Feld Content-Type
das Format. Das Format multipart/form-data
wird am häufigsten in traditionellen HTML-Formularen verwendet, die die POST-Methode nutzen. In diesem Format wird jedes Feld, das in die Nutzdaten der Anfrage eingefügt wird, durch den Code getrennt, der durch das Schlüsselwort boundary
angegeben wird. Die POST-Methode sollte nur dann verwendet werden, wenn es angebracht ist, da sie eine etwas größere Datenmenge verwendet als eine entsprechende Anfrage, die mit der GET-Methode gestellt wird. Da die GET-Methode die Parameter direkt in der Kopfzeile der Anfrage sendet, hat der gesamte Datenaustausch eine geringere Latenzzeit, da kein zusätzlicher Verbindungsschritt zur Übertragung des Nachrichtentextes erforderlich ist.
Der Response-Header
Hat der HTTP-Server die Kopfzeile der Request-Nachricht erhalten, sendet er eine Antwortnachricht an den Client zurück. Eine HTML-Datei-Anfrage hat normalerweise einen Antwort-Header wie diesen:
HTTP/1.1 200 OK Accept-Ranges: bytes Content-Length: 18170 Content-Type: text/html Date: Mon, 05 Apr 2021 13:44:25 GMT Etag: "606adcd4-46fa" Last-Modified: Mon, 05 Apr 2021 09:48:04 GMT Server: nginx/1.17.10
In der ersten Zeile steht die Version des HTTP-Protokolls, die in der Antwortnachricht verwendet wird und die der Version im Request-Header entsprechen muss. Dann, ebenfalls in der ersten Zeile, erscheint der Statuscode der Antwort, der angibt, wie der Server die Antwort auf die Anfrage interpretiert und erzeugt hat.
Der Statuscode ist eine dreistellige Zahl, wobei die äußerste linke Ziffer die Antwortklasse angibt. Es gibt fünf Klassen von Statuscodes, die von 1 bis 5 nummeriert sind und jeweils eine Art der vom Server durchgeführten Aktion angeben:
- 1xx (Informativ)
-
Die Anfrage wurde empfangen, der Prozess wird fortgesetzt.
- 2xx (Erfolgreich)
-
Die Anfrage wurde erfolgreich empfangen, verstanden und akzeptiert.
- 3xx (Weiterleitung)
-
Es müssen weitere Maßnahmen ergriffen werden, um die Anfrage abzuschließen.
- 4xx (Client-Fehler)
-
Die Anfrage enthält eine fehlerhafte Syntax oder kann nicht erfüllt werden.
- 5xx (Server-Fehler)
-
Der Server konnte eine scheinbar gültige Anfrage nicht beantworten.
Die zweite und dritte Ziffer werden verwendet, um zusätzliche Details anzugeben. Der Code 200 bedeutet beispielsweise, dass die Anfrage ohne Probleme beantwortet werden konnte. Wie im Beispiel gezeigt, kann auch eine kurze Textbeschreibung auf den Antwortcode (OK
) folgen. Einige spezifische Codes sind von besonderem Interesse, um sicherzustellen, dass der HTTP-Client in ungünstigen Situationen auf die Ressource zugreifen kann, oder um im Falle einer erfolglosen Anfrage den Grund für das Scheitern zu ermitteln:
301 Moved Permanently
-
Der Zielressource wurde eine neue permanente URL zugewiesen, die das Header-Feld
Location
in der Antwort bereitstellt. 302 Found
-
Die Zielressource findet sich vorübergehend unter einer anderen URL.
401 Unauthorized
-
Die Anfrage wurde nicht bearbeitet, da keine gültigen Authentifizierungsdaten für die Zielressource vorliegen.
403 Forbidden
-
Die Antwort
Forbidden
zeigt an, dass die Anfrage zwar gültig ist, der Server aber so konfiguriert ist, dass er sie nicht bereitstellt. 404 Not Found
-
Der Ursprungsserver hat keine aktuelle Darstellung für die Zielressource gefunden oder ist nicht bereit, die Existenz einer solchen offenzulegen.
500 Internal Server Error
-
Der Server ist auf eine unerwartete Bedingung gestoßen, die ihn daran hindert, die Anfrage zu beantworten.
502 Bad Gateway
-
Der Server, der als Gateway oder Proxy fungiert, hat eine ungültige Antwort von einem eingehenden Server erhalten, auf den er beim Versuch, die Anfrage zu erfüllen, zugegriffen hat.
Obwohl sie aussagen, dass die Anfrage nicht bearbeitet werden konnte, zeigen die Statuscodes 4xx
und 5xx
zumindest an, dass der HTTP-Server läuft und in der Lage ist, Anfragen zu empfangen. Die 4xx
-Codes erfordern eine Aktion auf dem Client, weil seine URL oder seine Anmeldedaten falsch sind. Im Gegensatz dazu deuten die 5xx
-Codes auf einen Fehler auf der Serverseite hin. Im Zusammenhang mit Webanwendungen zeigen diese beiden Klassen von Statuscodes daher an, dass die Fehlerquelle in der Anwendung selbst liegt, entweder im Client oder im Server, und nicht in der zugrunde liegenden Infrastruktur.
Statische und dynamische Inhalte
HTTP-Server verwenden zwei grundlegende Mechanismen, um den vom Client angeforderten Inhalt zu liefern. Der erste Mechanismus liefert statische Inhalte, d.h. der in der Request-Nachricht angegebene Pfad entspricht einer Datei im lokalen Dateisystem des Servers. Der zweite Mechanismus liefert dynamische Inhalte: Der HTTP-Server leitet die Anfrage an ein anderes Programm weiter – wahrscheinlich ein Skript –, das die Antwort aus verschiedenen Quellen, wie Datenbanken und anderen Dateien, zusammenstellt.
Obwohl es verschiedene HTTP-Server gibt, verwenden sie alle dasselbe HTTP-Kommunikationsprotokoll und übernehmen mehr oder weniger dieselben Konventionen. Eine Anwendung, die keine besonderen Anforderungen stellt, kann mit jedem herkömmlichen Server wie Apache oder NGINX implementiert werden. Beide sind in der Lage, dynamische Inhalte zu generieren und statische Inhalte bereitzustellen, aber es gibt feine Unterschiede in der Konfiguration der einzelnen Server.
Der Speicherort statischer Dateien, die ausgeliefert werden sollen, ist in Apache und NGINX unterschiedlich definiert. Üblicherweise liegen diese Dateien in einem speziellen Verzeichnis, dessen Name mit dem Host verknüpft ist, zum Beispiel /var/www/learning.lpi.org/
. Im Apache wird dieser Pfad durch die Konfigurationsanweisung DocumentRoot /var/www/learning.lpi.org
in einem Abschnitt definiert, der einen virtuellen Host beschreibt. Bei NGINX wird die Direktive root /var/www/learning.lpi.org
in einem server
-Abschnitt der Konfigurationsdatei verwendet.
Welchen Server Sie auch wählen, die Dateien unter /var/www/learning.lpi.org/
werden über HTTP auf fast dieselbe Weise bereitgestellt. Einige Felder in der Kopfzeile der Antwort und ihr Inhalt können zwischen den beiden Servern variieren, aber Felder wie Content-Type
müssen in der Kopfzeile der Antwort vorhanden und auf jedem Server konsistent sein.
Caching
HTTP wurde so konzipiert, dass es mit jeder Art von Internetverbindung funktioniert, ob schnell oder langsam. Außerdem muss der HTTP-Austausch aufgrund der verteilten Architektur des Internets viele Netzknoten durchlaufen. Daher ist es wichtig, eine Strategie zur Zwischenspeicherung von Inhalten anzuwenden, um die redundante Übertragung bereits heruntergeladener Inhalte zu vermeiden. HTTP-Übertragungen können mit zwei grundlegenden Arten von Caches arbeiten: shared und private.
Ein shared, also gemeinsam genutzter Cache wird von mehr als einem Client verwendet. Ein großer Content Provider könnte beispielsweise Caches auf geografisch verteilten Servern nutzen, so dass Kunden die Daten von ihrem nächstgelegenen Server erhalten. Sobald ein Client eine Anfrage gestellt hat und die Antwort in einem gemeinsamen Cache gespeichert wurde, erhalten andere Clients, die dieselbe Anfrage in demselben Gebiet stellen, die Antwort aus dem Cache.
Einen privaten Cache legt der Client für seine ausschließliche Verwendung selbst an. Dabei handelt es sich um die Art der Zwischenspeicherung, die der Webbrowser für Bilder, CSS-Dateien, JavaScript oder das HTML-Dokument selbst vornimmt, so dass sie nicht erneut heruntergeladen werden müssen, wenn sie in kurzem zeitlichen Abstand angefordert werden.
Note
|
Nicht alle HTTP-Anfragen müssen zwischengespeichert werden. Eine Anfrage mit der POST-Methode beispielsweise impliziert eine Antwort, die ausschließlich mit dieser speziellen Anfrage verknüpft ist, so dass ihr Antwortinhalt nicht wiederverwendet werden sollte. Standardmäßig werden nur Antworten auf Anfragen, die mit der GET-Methode gestellt werden, zwischengespeichert. Außerdem eignen sich nur Antworten mit schlüssigen Statuscodes wie 200 (OK), 206 (Partial Content), 301 (Moved Permanently) und 404 (Not Found) für das Caching. |
Sowohl die shared als auch die private Cache-Strategie verwenden HTTP-Header, um zu steuern, wie der heruntergeladene Inhalt zwischengespeichert wird. Beim privaten Cache konsultiert der Client den Response-Header und prüft, ob der Inhalt im lokalen Cache noch mit dem aktuellen Remote-Inhalt übereinstimmt. Ist dies der Fall, verzichtet der Client auf die Übertragung der Nutzdaten der Antwort und verwendet die lokale Version.
Die Gültigkeit der zwischengespeicherten Ressource kann auf verschiedene Weise beurteilt werden. Der Server kann in der Kopfzeile der Antwort auf die erste Anfrage ein Verfallsdatum angeben, so dass der Client die zwischengespeicherte Ressource nach Ablauf der Frist verwirft und sie erneut anfordert, um die aktualisierte Version zu erhalten. Der Server ist jedoch nicht immer in der Lage, das Verfallsdatum einer Ressource zu bestimmen, so dass es üblich ist, das Antwort-Header-Feld ETag
zu verwenden, um die Version der Ressource zu identifizieren, z.B. Etag: "606adcd4-46fa"
.
Um zu überprüfen, ob eine zwischengespeicherte Ressource aktualisiert werden muss, fordert der Client vom Server nur deren Antwortkopfzeile an. Wenn das Feld ETag
mit dem der lokal gespeicherten Version übereinstimmt, verwendet der Client den zwischengespeicherten Inhalt erneut. Andernfalls lädt er den aktualisierten Inhalt der Ressource vom Server herunter.
HTTP-Sitzungen
Bei einer herkömmlichen Website oder Webanwendung basieren die Funktionen zur Sitzungssteuerung auf den HTTP-Headern. Der Server kann zum Beispiel nicht davon ausgehen, dass alle Anfragen, die von derselben IP-Adresse kommen, von demselben Client stammen. Die verbreitetste Methode, über die der Server verschiedene Anfragen einem einzigen Client zuordnet, ist die Verwendung von Cookies, einem Identifikations-Tag, das der Server dem Client im HTTP-Header übergibt.
Cookies ermöglichen es dem Server, Informationen über einen bestimmten Client aufzubewahren, auch wenn die Person, die den Client bedient, sich nicht ausdrücklich identifiziert. Mit Cookies ist es möglich, Sitzungen einzurichten, in denen Anmeldungen, Warenkörbe, Präferenzen usw. zwischen verschiedenen Anfragen an denselben Server, der sie bereitgestellt hat, erhalten bleiben. Cookies werden auch verwendet, um das Surfverhalten der Benutzer zu verfolgen — daher ist es wichtig, vor der Übermittlung von Cookies die Zustimmung einzuholen.
Der Server setzt den Cookie in der Kopfzeile der Antwort über das Feld Set-Cookie
. Der Wert des Feldes ist ein Name-Wert-Paar, das ein mit einem bestimmten Client verbundenes Attribut darstellt. Der Server kann zum Beispiel eine Identifikationsnummer für einen Client erstellen, der eine Ressource zum ersten Mal anfordert, und diese im Antwort-Header an den Client übergeben:
HTTP/1.1 200 OK Accept-Ranges: bytes Set-Cookie: client_id=62b5b719-fcbf
Wenn der Client die Verwendung von Cookies zulässt, enthalten neue Anfragen an denselben Server das Cookie-Feld in der Kopfzeile:
GET /en/ HTTP/1.1 Host: learning.lpi.org Cookie: client_id=62b5b719-fcbf
Mit dieser Identifikationsnummer ruft der Server spezifische Definitionen für den Client ab und erzeugt eine individuelle Antwort. Es sind auch mehrere Set-Cookie
-Felder möglich, um verschiedene Cookies an denselben Client zu liefern. Auf diese Weise kann mehr als eine Definition auf der Client-Seite bewahrt werden.
Cookies werfen sowohl Fragen des Datenschutzes als auch potenzieller Sicherheitslücken auf, da sie grundsätzlich an einen anderen Client weitergegeben werden können, den der Server als den ursprünglichen Client identifiziert hat. Cookies, die der Aufrechterhaltung von Sitzungen dienen, bieten möglicherweise Zugang zu sensiblen Informationen des ursprünglichen Clients. Daher ist es sehr wichtig, dass Clients lokale Schutzmechanismen einsetzen, um zu verhindern, dass ihre Cookies unbefugt extrahiert und wiederverwendet werden.
Geführte Übungen
-
Welche HTTP-Methode verwendet die folgende Request-Nachricht?
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: */* Content-Length: 27 Content-Type: application/x-www-form-urlencoded
-
Wie erkennt ein HTTP-Server, der viele Websites hostet, für welche Website eine Anfrage bestimmt ist?
-
Welcher Parameter wird durch die Abfragezeichenfolge der URL
https://www.google.com/search?q=LPI
bereitgestellt? -
Warum ist die folgende HTTP-Anfrage nicht für das Caching geeignet?
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: */* Content-Length: 27 Content-Type: application/x-www-form-urlencoded
Offene Übungen
-
Wie können Sie den Webbrowser verwenden, um Anfragen und Antworten einer HTML-Seite zu überwachen?
-
HTTP-Server, die statische Inhalte bereitstellen, ordnen den angeforderten Pfad normalerweise einer Datei im Dateisystem des Servers zu. Was geschieht, wenn der Pfad in der Anfrage auf ein Verzeichnis verweist?
-
Der Inhalt von Dateien, die über HTTPS gesendet werden, ist durch Verschlüsselung geschützt, so dass er von Computern zwischen dem Client und dem Server nicht gelesen werden kann. Können diese Computer dazwischen trotzdem erkennen, welche Ressource der Client vom Server angefordert hat?
Zusammenfassung
Diese Lektion behandelt die Grundlagen von HTTP, dem Hauptprotokoll, das von Client-Anwendungen verwendet wird, um Ressourcen von Webservern anzufordern. In der Lektion werden die folgenden Konzepte behandelt:
-
Request-Nachrichten, Header-Felder und Methoden.
-
Antwort-Statuscodes.
-
Wie HTTP-Server Antworten erzeugen.
-
HTTP-Funktionen, die für Zwischenspeicherung und Sitzungsverwaltung nützlich sind.
Lösungen zu den geführten Übungen
-
Welche HTTP-Methode verwendet die folgende Request-Nachricht?
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: */* Content-Length: 27 Content-Type: application/x-www-form-urlencoded
Die POST-Methode.
-
Wie erkennt ein HTTP-Server, der viele Websites hostet, für welche Website eine Anfrage bestimmt ist?
Das Feld
Host
in der Kopfzeile der Anfrage gibt die Ziel-Website an. -
Welcher Parameter wird durch die Abfragezeichenfolge der URL
https://www.google.com/search?q=LPI
bereitgestellt?Der Parameter
q
mit dem WertLPI
. -
Warum ist die folgende HTTP-Anfrage nicht für das Caching geeignet?
POST /cgi-bin/receive.cgi HTTP/1.1 Host: learning.lpi.org User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: */* Content-Length: 27 Content-Type: application/x-www-form-urlencoded
Da Anfragen, die mit der POST-Methode gestellt werden, einen Schreibvorgang auf dem Server implizieren, sollten sie nicht zwischengespeichert werden.
Lösungen zu den offenen Übungen
-
Wie können Sie den Webbrowser verwenden, um Anfragen und Antworten einer HTML-Seite zu überwachen?
Alle gängigen Browser bieten Entwicklungswerkzeuge an, die u.a. alle Netzwerktransaktionen anzeigen können, die von der aktuellen Seite ausgeführt wurden.
-
HTTP-Server, die statische Inhalte bereitstellen, ordnen den angeforderten Pfad normalerweise einer Datei im Dateisystem des Servers zu. Was geschieht, wenn der Pfad in der Anfrage auf ein Verzeichnis verweist?
Es hängt davon ab, wie der Server konfiguriert ist. Standardmäßig suchen die meisten HTTP-Server nach einer Datei namens
index.html
(oder einem anderen vordefinierten Namen) in demselben Verzeichnis und senden sie als Antwort. Wenn die Datei nicht vorhanden ist, gibt der Server eine Antwort404 Not Found
aus. -
Der Inhalt von Dateien, die über HTTPS gesendet werden, ist durch Verschlüsselung geschützt, so dass er von Computern zwischen dem Client und dem Server nicht gelesen werden kann. Können diese Computer dazwischen trotzdem erkennen, welche Ressource der Client vom Server angefordert hat?
Nein, denn die HTTP-Header der Anfrage und der Antwort selbst werden ebenfalls mit TLS verschlüsselt.