Als Softwareentwickler werden Sie definitiv ein vollständiges und hierarchisches Verständnis dafür haben, wie Netzwerkanwendungen funktionieren, und dies schließt auch die in diesen Anwendungen verwendeten Technologien ein: wie Browser, HTTP, HTML, Webserver, Anforderungsverarbeitung usw.
In diesem Artikel wird eingehender untersucht, was im Hintergrund passiert, wenn Sie eine URL ~ ~
1. Zunächst müssen Sie die gewünschte URL in den Browser eingeben : 2. Die Browser sucht nach der IP -Adresse des DomänennamensDer erste Schritt in der Navigation besteht darin, die IP -Adresse zu ermitteln, indem Sie auf den Domänennamen zugreifen. Der DNS -Suchprozess ist wie folgt:
Browser -Caching - Der Browser Caches DNS -Aufzeichnungen für einen bestimmten Zeitraum. Interessanterweise teilt das Betriebssystem dem Browser nicht an, den DNS-Datensatz zu speichern, so dass verschiedene Browser eine selbstfixierte Zeit speichern (zwischen 2 Minuten und 30 Minuten). Systemcache - Wenn der erforderliche Datensatz im Browser -Cache nicht gefunden wird, wird der Browser einen Systemaufruf (GetHostByName in Windows) tätigen. Auf diese Weise können Sie Datensätze im System -Cache abrufen. Router -Cache - Als nächstes wird die vorherige Abfrageanforderung an den Router gesendet, der im Allgemeinen einen eigenen DNS -Cache hat. ISP -DNS -Cache - Das nächste, was Sie überprüfen sollten, ist der Server, auf dem der ISP -DNS -DNS ausgestattet ist. Hier finden Sie die entsprechenden Cache -Datensätze im Allgemeinen. Rekursive Suche-Der DNS-Server Ihres ISP startet mit dem Domänenname-Server vom Domänennamenserver von .com Top-Level zum Domänennamenserver von Facebook. Im Allgemeinen gibt es im Cache von DNS-Servern Domainnamen auf dem .com-Domain-Namenserver, sodass der Übereinstimmungsprozess zum obersten Server nicht so erforderlich ist.Die rekursive DNS -Suche ist in der folgenden Abbildung dargestellt:
DNS ist etwas besorgniserregend, das heißt, der gesamte Domain -Name wie wikipedia.org oder facebook.com sieht so aus, als würde er einer separaten IP -Adresse entsprechen. Glücklicherweise gibt es verschiedene Möglichkeiten, diesen Engpass zu beseitigen:
Loop -DNS ist die Lösung bei der Rückgabe mehrerer IPs bei der Suche DNS. Zum Beispiel entspricht Facebook.com tatsächlich vier IP -Adressen. Ein Lastausgleich ist ein Hardware -Gerät, das auf eine bestimmte IP -Adresse hört und Netzwerkanforderungen an einen Clusterserver weiterleitet. Einige große Standorte verwenden im Allgemeinen diesen teuren Hochleistungslastausgleich. Geografische DNS verbessert die Skalierbarkeit, indem Domain -Namen auf mehrere verschiedene IP -Adressen abzubilden, die auf dem geografischen Ort des Benutzers basieren. Auf diese Weise können verschiedene Server den Synchronisationsstatus nicht aktualisieren, aber es ist sehr gut, statische Inhalte abzubilden. Anycast ist eine Routing -Technologie, die mehrere physische Hosts mit IP -Adressen ordnet. Der einzige Nachteil ist, dass Anycast- und TCP -Protokoll nicht gut angepasst sind, sodass sie in diesen Lösungen selten verwendet werden.Die meisten DNS -Server verwenden Anycast, um effiziente DNS -Lookups mit geringer Latenz zu erhalten.
3. Der Browser sendet eine HTTP -Anforderung an den WebserverDa dynamische Seiten wie Facebook -Homepages bald und sogar sofort im Browser -Cache nach dem Öffnen ablaufen, besteht kein Zweifel daran, dass sie nicht von ihnen lesen können.
Der Browser sendet also eine Anfrage an den Server, auf dem sich Facebook befindet:
Holen Sie sich http://facebook.com/ http/1.1Akzeptieren: Anwendung/X-MS-Anwendung, Bild/JPEG, Anwendung/XAML+XML, [...]
Benutzer-Agent: Mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 6.1; Wow64; [...]
Akzeptanzkodierung: Gzip, Deflate
Verbindung: Keep-Alive
Host: Facebook.com
Cookie: Datr = 1265876274-[...]; loceme = en_us; lsd = ww [...]; c_user = 2101 [...]
Erhalten Sie diese Anfrage definiert die zu lesen: http://facebook.com/. Der Browser selbst definiert ( Benutzer-Agent- Header) und welche Art von entsprechender ( Akzeptieren und Akzeptieren kodierender Header) es akzeptieren möchte. In dem Verbindungsheader muss der Server die TCP -Verbindung nicht für nachfolgende Anforderungen schließen.
Die Anfrage enthält auch Cookies für den vom Browser gespeicherten Domain -Namen. Möglicherweise wissen Sie möglicherweise bereits, dass Cookies in verschiedenen Seitenanfragen Schlüsselwerte sind, die dem Status einer Website entsprechen. Auf diese Weise speichern Cookies den Anmeldebutzungsnamen, das servergesteuerte Kennwort und einige Benutzereinstellungen. Cookies werden im Client als Textdokument gespeichert und jedes Mal an den Server gesendet, wenn sie anfordern.
Es gibt viele Tools, um die ursprüngliche HTTP -Anforderung und die entsprechenden Werkzeuge zu betrachten. Der Autor verwendet es vor, Fiddler zu verwenden, und natürlich gibt es andere Werkzeuge wie Firebug. Diese Software kann eine große Hilfe bei der Optimierung der Website sein.
Zusätzlich zur Erhalt von Anforderungen wird eine andere Art von Anfrage gesendet, die häufig bei der Übermittlung von Formularen verwendet wird. Senden Sie eine Anfrage zur Übergabe ihrer Parameter über die URL (z. B. http://robozzle.com/puzzle.aspx?id=85). Senden Sie die Anfrage sendet ihre Parameter nach dem Anforderungskörperkopf.
Schrägstriche wie http://facebook.com/ sind entscheidend. In diesem Fall kann der Browser sicher Schrägstriche hinzufügen. Für Adressen wie http://example.com/FolderorFile, da der Browser nicht weiß, ob OrdnerorFile ein Ordner oder eine Datei ist, kann er nicht automatisch Schrägstriche hinzufügen. Zu diesem Zeitpunkt greift der Browser direkt auf die Adresse zu, ohne zu senken, und der Server reagiert auf eine Weiterleitung, was zu einem unnötigen Handschlag führt.
4. Permanent Redirect Response des Facebook -DienstesDas Bild zeigt die Antwort, die vom Facebook -Server an den Browser zurückgeschickt wurde:
HTTP/1.1 301 bewegte sich dauerhaftCache-Kontroll: Privat, No-Store, No-Cache, Must-Revalidate, Post-Check = 0,,
Vorprüfung = 0
Ausgelassen: Sa, 01. Januar 2000 00:00:00 GMT
Ort: http://www.facebook.com/
P3P: CP = DSP Law
Pragma: No-Cache
Set-Cookie: made_write_conn = deleted; läuft ab = Do, 12-Feb-2009 05:09:50 GMT;
Path =/; Domain = .facebook.com; httponly
Inhaltstyp: Text/HTML; charset = utf-8
X-CNECTION: Schließen
Datum: Fr, 12. Februar 2010 05:09:51 GMT
Inhaltslänge: 0
Der Server reagiert auf eine permanente Reaktion von 301, so dass der Browser http://www.facebook.com/ anstelle von http://facebook.com/ besucht.
Warum muss der Server umleiten, anstatt direkt die Webinhalte zu senden, die Benutzer sehen möchten? Es gibt viele interessante Antworten auf diese Frage.
Einer der Gründe ist die Suchmaschinenrangliste. Sie sehen, wenn eine Seite zwei Adressen enthält, wie http://www.igoro.com/ und http://igoro.com/, werden Suchmaschinen sie als zwei Websites betrachten, was zu einer Verringerung der Suchlinks für jedes und damit die Rangliste führt. Suchmaschinen wissen, was 301 dauerhafte Weiterleitungen bedeutet, sodass sie den Zugriff auf die Adressen mit www und ohne www unter demselben Website -Ranking klassifizieren.
Eine andere Sache ist, dass die Verwendung verschiedener Adressen dazu führt, dass die Freundlichkeit der Cache verschlechtert wird. Wenn eine Seite mehrere Namen enthält, kann sie im Cache mehrmals angezeigt werden.
5. Browser -Tracks UmleitungadresseDer Browser weiß nun, dass http://www.facebook.com/ die richtige Adresse ist, die zugegriffen werden muss, sodass eine weitere GET -Anfrage gesendet wird:
Holen Sie sich http://www.facebook.com/ http/1.1Akzeptieren: Anwendung/X-MS-Anwendung, Bild/JPEG, Anwendung/XAML+XML, [...]
Akzeptieren Sprache: en-us
Benutzer-Agent: Mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 6.1; Wow64; [...]
Akzeptanzkodierung: Gzip, Deflate
Verbindung: Keep-Alive
Cookie: lsd = xw [...]; c_user = 21 [...]; X-Referer = [...]
Host: www.facebook.com
Die Header -Informationen haben die gleiche Bedeutung wie in der vorherigen Anfrage.
6. Der Server behandelt die AnforderungDer Server empfängt die Fetch -Anforderung und verarbeitet und gibt eine Antwort zurück.
Dies scheint eine Vorwärtsaufgabe an der Oberfläche zu sein, aber in der Mitte gibt es viele interessante Dinge - eine einfache Website wie den Blog des Autors, geschweige denn eine Website wie Facebook!
Webserver -Software Die Webserver -Software (wie IIS und Apache) empfängt eine HTTP -Anforderung und stellt dann fest, welche Anforderungsverarbeitung für die Behandlung durchgeführt wird. Die Anfrageverarbeitung ist ein Programm, mit dem die Anforderung gelesen und HTML generiert werden kann, um zu antworten (z. B. ASP.NET, PHP, Ruby ...).Um das einfachste Beispiel zu geben, kann die Anforderungenverarbeitung in einer Dateihierarchie gespeichert werden, die die Site -Adressstruktur ordnet. Die Adresse wie http://example.com/folder1/page1.aspx wird die Datei /httpdocs/Folder1/page1.aspx zuordnen. Die Webserver -Software kann von der Adresse manuell als die entsprechende Anforderung verarbeitet werden, sodass die Veröffentlichungsadresse von Seite1.aspx http://example.com/folder1/page1 sein kann.
Beantragung der Verarbeitung Die Anforderung behandelt die Leseanforderung und ihre Parameter und Cookies. Es wird einige Daten gelesen und aktualisiert und besagt, dass die Daten auf dem Server gespeichert werden. Die Anforderungsverarbeitung erzeugt dann eine HTML -Antwort.Alle dynamischen Websites haben eine interessante Schwierigkeit - wie man Daten speichert. Die Hälfte der kleinen Websites verfügt über eine SQL -Datenbank zum Speichern von Daten. Das Speichern großer Datenmengen und/oder stark besuchten Websites muss einige Möglichkeiten finden, um die Datenbank mehrerer Maschinen zuzuweisen. Zu den Lösungen gehören: Sharding (basierend auf Primärschlüsselwerten, Datentabellen werden in mehrere Datenbanken verteilt), Replikation und vereinfachte Datenbanken, die eine schwache semantische Konsistenz verwenden.
Die Delegierung von Arbeiten an die Stapelverarbeitung ist eine billige Technologie, um die Daten aktualisiert zu halten. Zum Beispiel muss Facebook News -Feeds rechtzeitig aktualisieren, aber die Funktionen der Personen, die Sie vielleicht mit Datenunterstützung kennen, müssen nur jede Nacht aktualisiert werden (der Autor vermutet, dass dies nicht bekannt ist, wie man die Funktion verbessert). Batch -Job -Updates können dazu führen, dass weniger wichtige Daten veraltet sind, aber Datenaktualisierungen schneller und prägnanter machen.
7. Der Server sendet eine HTML -Antwort zurückDas Bild ist die vom Server generierte und zurückgegebene Antwort:
HTTP/1.1 200 OKCache-Kontroll: Privat, No-Store, No-Cache, Must-Revalidate, Post-Check = 0,,
Vorprüfung = 0
Ausgelassen: Sa, 01. Januar 2000 00:00:00 GMT
P3P: CP = DSP Law
Pragma: No-Cache
Inhaltskodierung: Gzip
Inhaltstyp: Text/HTML; charset = utf-8
X-CNECTION: Schließen
Transfer-Codierung: Chunked
Datum: Fr, 12. Februar 2010 09:05:55 GMT
2b3tn@[...]
Die gesamte Antwortgröße beträgt 35 KB, von denen die meisten nach der Sortierung als Blob -Typ übertragen werden.
Der Inhaltskodierterminal teilt dem Browser mit, dass der gesamte Antwortkörper mit dem GZIP -Algorithmus komprimiert wird. Nachdem Sie den Blobblock dekomprimiert haben, können Sie die erwartete HTML wie folgt sehen:<! DocType html public -// w3c // dtd xhtml 1.0 strict // enhttp://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>
<html xmlns = http: //www.w3.org/1999/xhtml xml: Lang = en
lang = en id = facebook class = no_js>
<kopf>
<meta http-äquiv = content-type content = text/html; charset = utf-8 />
<meta http-äquiv = inhaltssprachiger content = en />
...
In Bezug auf die Komprimierung erklärt die Header -Informationen, ob diese Seite zwischengespeichert ist, wie es geht, wenn sie zwischengespeichert wird, welche Cookies festgelegt werden sollten (dieser Punkt ist nicht in der vorherigen Antwort), Datenschutzinformationen usw.
Bitte beachten Sie, dass der Inhaltstyp im Header auf Text/HTML eingestellt ist. Mit dem Header können der Browser den Antwortinhalt in HTML rendern, anstatt ihn in Dateiformular herunterzuladen. Der Browser entscheidet, wie die Antwort anhand der Headerinformationen interpretiert werden kann, wird jedoch auch andere Faktoren wie URL -Erweiterungsinhalte berücksichtigen.
8. Der Browser zeigt HTML anWenn der Browser nicht alle HTML -Dokumente vollständig akzeptiert, wird diese Seite angezeigt:
9. Der Browser sendet, um Objekte in HTML eingebettet zu erhaltenWenn der Browser HTML anzeigt, bemerkt es die Tags, die den Inhalt anderer Adressen erhalten müssen. Zu diesem Zeitpunkt sendet der Browser eine GET -Anfrage, um die Dateien zurückzugewinnen.
Hier sind einige URLs, die wir beim Besuch von Facebook.com wiederholen müssen:
Bild http://static.ak.fbcdn.net/rsrc.php/z12e0/hash/8q2anwu7.gifhttp://static.ak.fbcdn.net/rsrc.php/zbs5c/hash/7hwy7at6.gif
… CSS -Stiltisch
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 alle durchlaufen einen ähnlichen Prozess wie das HTML -Lesen. Der Browser sucht also nach diesen Domain -Namen in DNS, sendet Anfragen, Weiterleitungen usw.
Im Gegensatz zu dynamischen Seiten ermöglichen statische Dateien den Browser jedoch, sie zu zwischenstrahlen. Einige Dateien müssen möglicherweise nicht mit dem Server kommunizieren und werden direkt aus dem Cache gelesen. Die Antwort des Servers enthält die Fristinformationen für statische Dateien, sodass der Browser weiß, wie lange er zwischengespeichert werden muss. Außerdem kann jede Antwort einen ETAG -Header (den Entitätswert der angeforderten Variablen) enthalten, der wie die Versionsnummer funktioniert. Wenn der Browser feststellt, dass die Versions -ETAG -Informationen der Datei bereits vorhanden sind, wird die Übertragung der Datei sofort gestoppt.
Versuchen Sie zu erraten, was fbcdn.net in der Adresse repräsentiert? Die clevere Antwort ist das Facebook -Inhaltsverteilungsnetzwerk. Facebook verwendet das Content Distribution Network (CDN), um statische Dateien wie Bilder, CSS -Tabellen und JavaScript -Dateien zu verteilen. Daher werden diese Dateien in vielen CDN -Rechenzentren auf der ganzen Welt gesichert.
Der statische Inhalt repräsentiert häufig die Bandbreitengröße der Site und kann auch leicht über ein CDN kopiert werden. Normalerweise verwenden Websites CDNs 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 zu pingen, erhalten Sie möglicherweise eine Antwort von einem bestimmten Akamai.net -Server. Interessanterweise kann der Antwortserver beim Wieder ping unterschiedlich sein, was bedeutet, dass der Lastausgleich hinter den Kulissen zu funktionieren beginnt.
10. Der Browser sendet eine asynchrone (AJAX) AnfrageDer Client wird vom großen Geist von Web 2.0 geführt und bleibt nach Abschluss der Seitenanzeige mit dem Server in Kontakt.
Nehmen wir als Beispiel auf die Facebook -Chat -Funktion. Es bleibt mit dem Server in Kontakt, um den Status Ihres hellen und grauen Freunde rechtzeitig zu aktualisieren. Um den Freund dieser Avatare 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, bei der es sich um einen Programm für Programme handelt, das angewendet wird oder eine Anfrage gesendet hat. Oder im Facebook -Beispiel sendet der Kunde eine Anfrage an http://www.facebook.com/ajax/chat/buddy_list.php, um die Statusinformationen online in Ihrem Freund zu erhalten.
Wenn es um dieses Muster geht, müssen wir über Ajax sprechen-asynchrones JavaScript und XML. Obwohl es keinen klaren Grund gibt, warum der Server im XML -Format reagiert. Lassen Sie mich Ihnen ein weiteres Beispiel geben. Für asynchrone Anfragen wird Facebook einige JavaScript -Code -Snippets zurückgeben.
Mit dem Fiddler -Tool können Sie unter anderem asynchrone Anfragen von Ihrem Browser sehen. Tatsächlich können Sie nicht nur passiv als Zuschauer dieser Anfragen fungieren, sondern auch aktiv angreifen, um sie zu ändern und neu zu senden. Ajax -Anfragen sind so einfach, sich täuschen zu lassen, aber sie machen diese Online -Spieleentwickler, die Punktzahlen erzielen, depressiv. (Natürlich nicht andere wie das anlügen ~)
Die Facebook -Chat -Funktion bietet einen interessanten Fall von AJAX: Drücken Sie Daten vom Server zum Client. Da HTTP ein Request-Response-Protokoll ist, kann der Chat-Server keine neuen Nachrichten an den Client senden. Stattdessen muss der Client alle paar Sekunden die Serverseite befragen, um festzustellen, ob neue Nachrichten vorhanden sind.
Die Umfrage für diese Situationen ist eine interessante Technik zur Reduzierung der Serverlast. Wenn der Server bei der Befragung keine neuen Nachrichten hat, ignoriert er den Client. Wenn die neue Nachricht vom Client noch nicht abgestimmt ist, findet der Server die unvollendete Anfrage und gibt die neue Nachricht als Antwort an den Client zurück.