Was genau passiert im Hintergrund, wenn Sie eine URL eingeben?

Was genau passiert im Hintergrund, wenn Sie eine URL eingeben?

Als Softwareentwickler müssen Sie über ein vollständiges hierarchisches Verständnis der Funktionsweise von Netzwerkanwendungen verfügen, wozu auch die von diesen Anwendungen verwendeten Technologien gehören: Browser, HTTP, HTML, Netzwerkserver, Anforderungsverarbeitung usw.

In diesem Artikel wird genauer untersucht, was im Hintergrund passiert, wenn Sie eine URL eingeben.

1. Zuerst müssen Sie die URL in Ihren Browser eingeben :

2. Der Browser sucht die IP-Adresse des Domänennamens

image

Der erste Schritt bei der Navigation besteht darin, die IP-Adresse des Domänennamens herauszufinden, den Sie besuchen. Der DNS-Lookup-Prozess läuft wie folgt ab:

Browser-Caching – Browser speichern DNS-Einträge für einen bestimmten Zeitraum im Cache. Interessanterweise teilt das Betriebssystem dem Browser nicht mit, wie lange die DNS-Einträge gespeichert werden sollen. Verschiedene Browser speichern sie daher für einen festgelegten Zeitraum (zwischen 2 und 30 Minuten). Systemcache – Wenn der erforderliche Datensatz nicht im Browsercache gefunden wird, führt der Browser einen Systemaufruf durch (gethostbyname in Windows). Dadurch werden die Datensätze im Systemcache abgerufen. Router-Cache – Als nächstes wird die vorherige Abfrageanforderung an den Router gesendet, der normalerweise über einen eigenen DNS-Cache verfügt. ISP-DNS-Cache – Als Nächstes müssen Sie den DNS-Cache-Server des ISP überprüfen. Die entsprechenden Cache-Records sind in der Regel hier zu finden. Rekursive Suche – Der DNS-Server Ihres Internetdienstanbieters führt eine rekursive Suche durch, beginnend bei den Stamm-Nameservern, von den Top-Level-Nameservern von .com bis hin zu den Nameservern von Facebook. Im Allgemeinen enthält der DNS-Server-Cache die Domänennamen im .com-Domänennamenserver, sodass der Abgleichvorgang mit dem Top-Level-Server nicht unbedingt erforderlich ist.

Die rekursive DNS-Suche wird in der folgenden Abbildung dargestellt:

500px-An_example_of_theoretical_DNS_recursion_svg

Eines der Dinge, die bei DNS Anlass zur Sorge geben, ist die Tatsache, dass ganze Domänen wie wikipedia.org oder facebook.com scheinbar nur einer einzigen IP-Adresse entsprechen. Glücklicherweise gibt es mehrere Möglichkeiten, diesen Engpass zu beseitigen:

Round Robin DNS ist eine Lösung, wenn bei einer DNS-Suche mehrere IPs zurückgegeben werden. Beispielsweise entspricht Facebook.com tatsächlich vier IP-Adressen. Ein Load Balancer ist ein Hardwaregerät, das auf eine bestimmte IP-Adresse hört und Netzwerkanforderungen an die Server im Cluster weiterleitet. Einige große Sites verwenden im Allgemeinen diesen teuren Hochleistungs-Load Balancer. Geografisches DNS verbessert die Skalierbarkeit, indem es Domänennamen basierend auf dem geografischen Standort des Benutzers mehreren verschiedenen IP-Adressen zuordnet. Auf diese Weise können verschiedene Server nicht synchron aktualisiert werden, es eignet sich jedoch hervorragend für die Zuordnung statischer Inhalte. Anycast ist eine Routing-Technologie, die eine IP-Adresse mehreren physischen Hosts zuordnet. Der einzige Nachteil besteht darin, dass sich Anycast nicht gut an das TCP-Protokoll anpasst und daher in diesen Lösungen selten verwendet wird.

Die meisten DNS-Server verwenden Anycast, um effiziente DNS-Lookups mit geringer Latenz zu erreichen.

3. Der Browser sendet eine HTTP-Anfrage an den Webserver

image

Denn dynamische Seiten wie etwa die Startseite von Facebook verfallen nach dem Öffnen zeitnah oder sogar sofort in den Cache des Browsers und können diesen nicht auslesen.

Der Browser sendet daher die folgende Anfrage an den Facebook-Server:

 GET http://facebook.com/ HTTP/1.1
Akzeptieren: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
User-Agent: Mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Akzeptierte Kodierung: gzip, deflate
Verbindung: Keep-Alive
Gastgeber: facebook.com
Cookies: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...]

GET Diese Anfrage definiert die zu lesende URL : „http://facebook.com/“. Der Browser definiert sich selbst ( User-Agent- Header) und welche Art von Antworten er erhalten möchte (Accept- und Accept -Encoding -Header). Der Connection- Header fordert den Server auf, die TCP-Verbindung für nachfolgende Anfragen nicht zu schließen.

Die Anfrage umfasst auch die vom Browser für die Domain gespeicherten Cookies . Wie Sie wahrscheinlich bereits wissen, sind Cookies Schlüssel-Wert-Paare, die den Status einer Website über verschiedene Seitenanforderungen hinweg verfolgen. Auf diese Weise werden in Cookies der Anmeldebenutzername, das vom Server zugewiesene Passwort und einige Benutzereinstellungen gespeichert. Cookies werden im Client als Textdatei gespeichert und bei jeder Anfrage an den Server gesendet.

Zum Anzeigen unverarbeiteter HTTP-Anfragen und der dazugehörigen Antworten stehen zahlreiche Tools zur Verfügung. Der Autor verwendet am liebsten Fiddler, natürlich gibt es auch andere Tools wie FireBug. Diese Software kann bei der Website-Optimierung eine große Hilfe sein.

Neben den Get-Requests gibt es auch noch die Send-Request, welche häufig beim Absenden von Formularen zum Einsatz kommt. Senden Sie eine Anfrage mit Angabe ihrer Parameter über die URL (z. B.: http://robozzle.com/puzzle.aspx?id=85). Eine Sendeanforderung sendet ihre Parameter nach den Anforderungstext-Headern.

Wie in „http://facebook.com/“ ist der Schrägstrich entscheidend. In diesem Fall kann der Browser den Schrägstrich bedenkenlos hinzufügen. Bei einer Adresse wie „http://example.com/folderOrFile“ kann der Browser nicht automatisch einen Schrägstrich hinzufügen, da er nicht weiß, ob es sich bei folderOrFile um einen Ordner oder eine Datei handelt. An diesem Punkt greift der Browser direkt auf die Adresse ohne Schrägstrich zu und der Server antwortet mit einer Umleitung, was zu einem unnötigen Handshake führt.

4. Permanente Weiterleitungsantwort vom Facebook-Dienst

image

Das Bild zeigt die Antwort, die der Facebook-Server an den Browser zurücksendet:

 HTTP/1.1 301 dauerhaft verschoben
Cache-Steuerung: privat, kein Speichern, kein Cache, muss erneut validiert werden, Post-Check=0,
Vorprüfung=0
Läuft ab: Samstag, 01. Januar 2000, 00:00:00 GMT
Standort: http://www.facebook.com/
P3P: CP="DSP-GESETZ"
Pragma: kein Cache
Set-Cookie: made_write_conn=gelöscht; läuft ab=Do, 12.02.2009 05:09:50 GMT;
Pfad=/; Domäne=.facebook.com; nur http
Inhaltstyp: text/html; Zeichensatz=utf-8
X-Connection: schließen
Datum: Fr, 12. Februar 2010 05:09:51 GMT
Inhaltslänge: 0

Der Server antwortet dem Browser mit einer 301 Permanent Redirect-Antwort, sodass der Browser „http://www.facebook.com/“ statt „http://facebook.com/“ besucht.

Warum muss der Server eine Umleitung vornehmen, anstatt den Webseiteninhalt, den der Benutzer sehen möchte, direkt zu senden? Auf diese Frage gibt es viele interessante Antworten.

Einer der Gründe hat mit dem Ranking in Suchmaschinen zu tun. Wenn eine Seite beispielsweise über zwei Adressen verfügt, beispielsweise http://www.igoro.com/ und http://igoro.com/, denken die Suchmaschinen, dass es sich um zwei Websites handelt. Dies führt dazu, dass jede von ihnen weniger Suchlinks und ein niedrigeres Ranking aufweist. Suchmaschinen wissen, was eine permanente 301-Weiterleitung bedeutet, daher ordnen sie Besuche von Adressen mit und ohne „www“ auf derselben Website ein.

Ein weiterer Grund besteht darin, dass die Verwendung unterschiedlicher Adressen die Cache-Freundlichkeit beeinträchtigt. Wenn eine Seite mehrere Namen hat, kann sie mehrmals im Cache erscheinen.

5. Browser-Tracking-Umleitungsadresse

image

Jetzt weiß der Browser, dass „http://www.facebook.com/“ die richtige Adresse ist, und sendet eine weitere GET-Anfrage:

 GET http://www.facebook.com/ HTTP/1.1
Akzeptieren: application/x-ms-application, image/jpeg, application/xaml+xml, [...]
Akzeptieren-Sprache: en-US
User-Agent: Mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 6.1; WOW64; [...]
Akzeptierte Kodierung: gzip, deflate
Verbindung: Keep-Alive
Cookies: lsd=XW[...]; c_user=21[...]; x-referer=[...]
Gastgeber: www.facebook.com

Die Header-Informationen haben die gleiche Bedeutung wie in der vorherigen Anfrage.

6. Der Server „verarbeitet“ die Anfrage

image

Der Server empfängt die GET-Anfrage, verarbeitet sie und gibt eine Antwort zurück.

Auf den ersten Blick mag dies eine einfache Aufgabe sein, aber tatsächlich passieren dabei viele interessante Dinge – bei einer so einfachen Website wie dem Blog des Autors, ganz zu schweigen von einer Website mit so vielen Besuchern wie Facebook!

Webserver-Software
Webserver-Software (wie IIS und Apache) empfängt eine HTTP-Anforderung und bestimmt dann, welche Anforderungsverarbeitung zur Bearbeitung ausgeführt werden soll. Ein Anforderungshandler ist ein Programm, das die Anforderung versteht und als Antwort HTML generiert (wie ASP.NET, PHP, RUBY ...).

Im einfachsten Beispiel kann die Anforderungsverarbeitung in einer Dateihierarchie gespeichert werden, die die Struktur einer Website-Adresse abbildet. Beispielsweise wird die Adresse http://example.com/folder1/page1.aspx der Datei /httpdocs/folder1/page1.aspx zugeordnet. Die Webserver-Software kann so konfiguriert werden, dass Adressanforderungen manuell verarbeitet werden, sodass die Veröffentlichungsadresse von page1.aspx http://example.com/folder1/page1 lauten kann.

Anfragebearbeitung
Der Request-Handler liest die Anfrage sowie deren Parameter und Cookies. Es liest und aktualisiert möglicherweise einige Daten und speichert sie auf dem Server. Die Anforderungsverarbeitung generiert dann eine HTML-Antwort.

Alle dynamischen Websites stehen vor einer interessanten Schwierigkeit: der Speicherung von Daten. Die meisten kleinen Websites verfügen über eine SQL-Datenbank zum Speichern von Daten, und Websites, die große Datenmengen speichern und/oder viel Datenverkehr haben, müssen eine Möglichkeit finden, die Datenbank auf mehrere Computer zu verteilen. Zu den Lösungen gehören: Sharding (Verteilung von Datentabellen auf mehrere Datenbanken basierend auf Primärschlüsselwerten), Replikation und vereinfachte Datenbanken mit schwacher semantischer Konsistenz.

Das Delegieren von Aufgaben an die Stapelverarbeitung ist eine kostengünstige Methode, um Daten auf dem neuesten Stand zu halten. So muss Facebook beispielsweise seinen Newsfeed zeitnah aktualisieren, die datengestützte Funktion „Personen, die Sie vielleicht kennen“ hingegen nur jede Nacht (das ist die Vermutung des Autors, und es ist nicht bekannt, wie diese Funktion verbessert werden soll). Durch Stapelverarbeitungsaktualisierungen können zwar einige weniger wichtige Daten veralten, die Datenaktualisierung kann jedoch schneller und präziser erfolgen.

7. Der Server sendet eine HTML-Antwort zurück

image

Die Abbildung zeigt die vom Server generierte und zurückgegebene Antwort:

 HTTP/1.1 200 OK
Cache-Steuerung: privat, kein Speichern, kein Cache, muss erneut validiert werden, Post-Check=0,
Vorprüfung=0
Läuft ab: Samstag, 01. Januar 2000, 00:00:00 GMT
P3P: CP="DSP-GESETZ"
Pragma: kein Cache
Inhaltskodierung: gzip
Inhaltstyp: text/html; Zeichensatz=utf-8
X-Connection: schließen
Übertragungskodierung: chunked
Datum: Fr, 12. Februar 2010 09:05:55 GMT

2b3Tn@[...]

Die gesamte Antwortgröße beträgt 35 kB, wovon der Großteil nach dem Zuschneiden als Blob übertragen wird.

Der Content-Encoding -Header teilt dem Browser mit, dass der gesamte Antworttext mit dem Gzip-Algorithmus komprimiert werden soll. Nach dem Dekomprimieren des Blobs können Sie das erwartete HTML sehen:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de"
lang="de" id="facebook" class="no_js">
<Kopf>
<meta http-equiv="Inhaltstyp" content="text/html; charset=utf-8" />
<meta http-equiv="Inhaltssprache" content="en" />
...

In Bezug auf die Komprimierung geben die Header-Informationen an, ob die Seite zwischengespeichert werden soll, wie dies im Falle einer Zwischenspeicherung erfolgen soll, welche Cookies gesetzt werden sollen (dies ist in der vorherigen Antwort nicht enthalten), Datenschutzinformationen usw.

Bitte beachten Sie, dass der Content-Type- Header auf „ text/html “ eingestellt ist. Der Header weist den Browser an, den Antwortinhalt als HTML darzustellen, anstatt ihn als Datei herunterzuladen. Der Browser entscheidet anhand der Header-Informationen, wie die Antwort zu interpretieren ist, berücksichtigt aber auch andere Faktoren wie die URL-Erweiterung.

8. Der Browser beginnt mit der Anzeige von HTML

Noch bevor der Browser das gesamte HTML-Dokument gelesen hat, beginnt er mit der Anzeige dieser Seite:

image

9. Der Browser sendet eine Anfrage zum Abrufen eines in HTML eingebetteten Objekts

image

Wenn der Browser das HTML anzeigt, erkennt er die Tags, die den Inhalt anderer Adressen abrufen müssen. An diesem Punkt sendet der Browser eine Get-Anfrage, um die Dateien abzurufen.

Hier sind einige URLs, die wir erneut abrufen müssen, wenn wir facebook.com besuchen:

Bild
http://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gif
http://static.ak.fbcdn.net/rsrc.php/zBS5C/hash/7hwy7at6.gif
CSS-Stylesheets
http://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.css
http://static.ak.fbcdn.net/rsrc.php/zANE1/hash/cvtutcee.css
JavaScript-Dateien
http://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.js
http://static.ak.fbcdn.net/rsrc.php/z6R9L/hash/cq2lgbs8.js

Diese Adressen durchlaufen einen Prozess, der dem Lesen von HTML ähnelt. Der Browser sucht also nach diesen Domänen im DNS, sendet die Anfrage, leitet um usw.

Im Gegensatz zu dynamischen Seiten können statische Dateien jedoch von Browsern zwischengespeichert werden. Einige Dateien müssen möglicherweise nicht mit dem Server kommunizieren und können direkt aus dem Cache gelesen werden. Die Antwort des Servers enthält Informationen darüber, wie lange statische Dateien aufbewahrt werden sollen, sodass der Browser weiß, wie lange er sie zwischenspeichern muss. Darüber hinaus kann jede Antwort einen ETag-Header enthalten (den Entity-Wert der angeforderten Variable), der wie eine Versionsnummer funktioniert. Wenn der Browser feststellt, dass die Versions-ETag-Informationen der Datei bereits vorhanden sind, stoppt er die Übertragung der Datei sofort.

Versuchen Sie zu erraten, wofür „ fbcdn.net “ in der Adresse steht? Die clevere Antwort lautet „Facebook Content Delivery Network“. Facebook verwendet ein Content Delivery Network (CDN), um statische Dateien wie Bilder, CSS-Tabellen und JavaScript-Dateien bereitzustellen. Daher werden diese Dateien in vielen CDN-Rechenzentren auf der ganzen Welt gesichert.

Statischer Inhalt stellt häufig die Bandbreitengröße der Site dar und kann problemlos über CDN repliziert werden. Normalerweise verwenden Websites CDN von Drittanbietern. Beispielsweise werden die statischen Dateien von Facebook von Akamai, dem größten CDN-Anbieter, gehostet.

Wenn Sie beispielsweise versuchen, static.ak.fbcdn.net anzupingen, erhalten Sie möglicherweise eine Antwort von einem akamai.net-Server. Interessanterweise kann beim erneuten Ping ein anderer Server antworten, was bedeutet, dass der Lastausgleich im Hintergrund zu arbeiten begonnen hat.

10. Der Browser sendet eine asynchrone (AJAX) Anfrage

image

Im Sinne des Web 2.0 bleibt der Client auch nach der Anzeige der Seite mit dem Server verbunden.

Nehmen wir als Beispiel die Chat-Funktion von Facebook: Sie bleibt mit dem Server in Verbindung, um den Status Ihrer hellen und grauen Freunde rechtzeitig zu aktualisieren. Um den Status dieser Freunde, deren Avatare leuchten, zu aktualisieren, sendet der im Browser ausgeführte JavaScript-Code eine asynchrone Anfrage an den Server. Diese asynchrone Anfrage wird an eine bestimmte Adresse gesendet und ist eine programmgesteuert erstellte Abruf- oder Sendeanfrage. Immer noch im Facebook-Beispiel sendet der Client eine Veröffentlichungsanforderung an http://www.facebook.com/ajax/chat/buddy_list.php, um die Online-Statusinformationen darüber abzurufen, welche Ihrer Freunde online sind.

Bei diesem Muster müssen wir von „AJAX“ sprechen – „Asynchronous JavaScript and XML“, obwohl es keinen klaren Grund gibt, warum der Server im XML-Format antwortet. Ein weiteres Beispiel: Bei asynchronen Anfragen gibt Facebook einige JavaScript-Codeausschnitte zurück.

Fiddler ist unter anderem ein Tool, mit dem Sie die asynchronen Anfragen des Browsers einsehen können. Tatsächlich können Sie diese Anfragen nicht nur passiv beobachten, sondern auch die Initiative ergreifen, um sie zu ändern und erneut zu senden. Die Tatsache, dass AJAX-Anfragen leicht ausgetrickst werden können, ist für Entwickler von Online-Spielen, bei denen die Punktzahl im Auge behalten wird, frustrierend. (Natürlich, lügen Sie andere nicht auf diese Weise an~)

Die Chat-Funktion von Facebook liefert ein interessantes Beispiel für das Problem mit AJAX: das Übertragen von Daten vom Server an den Client. Da HTTP ein Anforderung-Antwort-Protokoll ist, kann der Chat-Server keine neuen Nachrichten an den Client senden. Stattdessen muss der Client alle paar Sekunden den Server abfragen, um zu sehen, ob neue Nachrichten vorliegen.

Long-Polling ist eine interessante Technik, um die Serverlast in solchen Situationen zu reduzieren. Wenn der Server bei der Abfrage keine neuen Nachrichten hat, ignoriert er den Client. Wenn vor Ablauf der Zeit eine neue Nachricht vom Client eingeht, findet der Server die unvollendete Anforderung und gibt die neue Nachricht als Antwort an den Client zurück.

<<:  Oberflächliches Webdesign

>>:  Details der benutzerdefinierten Vue-Anweisung

Artikel empfehlen

Lösung für die Nichterreichbarkeit des Tencent Cloud Server Tomcat-Ports

Ich habe vor Kurzem einen Server mit Tencent Clou...

Detaillierte Schritte zur Installation von RabbitMQ im Docker

Inhaltsverzeichnis 1. Finde den Spiegel 2. Laden ...

JavaScript zählt, wie oft ein Zeichen vorkommt

In diesem Artikelbeispiel wird der spezifische Ja...

js, um einen einfachen Taschenrechner zu erstellen

In diesem Artikel finden Sie den spezifischen Cod...

So implementieren Sie die Kontrollkästchen- und Radioausrichtung

Nicht nur das Verhalten verschiedener Browser ist...

Probleme bei der Ausführungsreihenfolge von AND und OR in SQL-Anweisungen

Frage Beim Schreiben von Datenbank-SQL ist mir ge...

XHTML-Tags sollten richtig verwendet werden

<br />In früheren Tutorials von 123WORDPRESS...

Detaillierte Erläuterung des MySQL Master-Slave-Replikationsprozesses

1. Was ist Master-Slave-Replikation? Die DDL- und...

Web-Frontend-Entwicklung CSS-bezogene Teamzusammenarbeit

Die Frontend-Entwicklungsabteilung wächst, die Mi...