3 Stimmen

Frage zum Webbrowser und zum Herunterladen/Hochladen von Dateien?

Ich frage mich, wie ein Webbrowser funktioniert. Ich habe gerade mein Lehrbuch über Netzwerke durchgelesen. Nachstehend meine wilde Fantasie und meine Fragen.

Webbrowser arbeiten normalerweise mit dem HTTP-Protokoll. Die erste Frage wird also lauten:

  • Wer ist für die Unterstützung des HTTP-Protokolls zuständig?

Ich denke, das HTTP-Protokoll sollte im Webbrowser implementiert werden, während die Protokolle TCP, UDP, IP usw. im Betriebssystem implementiert werden sollten. Aus diesem Grund wird das HTTP-Protokoll auch als Protokoll auf Anwendungsebene . ( Korrigieren Sie mich, wenn ich falsch liege. )

Kehren Sie zum Szenario der HTTP-Kommunikation zurück.

Auf der Kundenseite :

Wenn eine Adresse in den Webbrowser eingegeben wird, wählt der Webbrowser die richtige HTTP-Methode und erstellt eine vollständige HTTP-Anfrage. Diese HTTP-Anfrage ist nichts anderes als reiner ASCII-Text. Dann wählt der Browser eine private Portnummer und verwendet das TCP-Protokoll, um den Text-Bitstrom an den Server zu senden. Während dieses Prozesses wird eine DNS-Abfrage durchgeführt, wenn die URL keine IP-Adresse ist.

Auf der Serverseite :

Wenn ein TCP-Paket beim Server ankommt, wird geprüft, ob es auf den Port 80 gerichtet ist. Wenn dies der Fall ist, wird es an den Serverprozess weitergeleitet, und nun hat das TCP-Protokoll seine Aufgabe erfüllt, und es ist Zeit für das Serverprogramm, in Aktion zu treten. Das Serverprogramm muss das HTTP-Protokoll implementieren, damit es die aus dem TCP-Paket extrahierte HTTP-Anfrage des Client-Browsers analysieren kann. Und dann die erforderliche HTML-Datei an den Client zurückschicken. Diese HTML-Dateien können statisch sein oder mit Technologien wie ASP.NET dynamisch erzeugt werden.

Im Fall von Hochladen und Herunterladen von Dateien Ich denke, dass es 2 verschiedene Ansätze geben kann.

  • Unabhängig vom Format der Datei können wir sie als Base64-String kodieren und so als Teil der Webseite einbetten. Ich frage mich, ob es möglich ist, eine jpeg-Datei als Base64-String zu kodieren und sie in eine Webseite einzubetten. Korrigieren Sie mich, wenn ich falsch liege. )

  • Der andere Ansatz besteht darin, den Dateiinhalt nicht in die Webseite einzubetten, sondern ihn direkt über TCP-Verbindungen zu übertragen. Dieser Ansatz erfordert keine Base64-Kodierung und dürfte eine bessere Leistung aufweisen. ( Korrigieren Sie mich, wenn ich falsch liege. )

Vielleicht habe ich einen schlechten Titel für die obigen Fragen und Aussagen gewählt.

Ich hoffe, dass der Moderator diese Frage nicht als "off topic" betrachtet.

Vielen Dank!

2voto

tnacho Punkte 148

Ich habe einige Dinge gesehen, von denen ich glaube, dass sie nicht zu 100% korrekt sind...

Dann wählt der Browser eine private Portnummer und verwendet das TCP-Protokoll, um den Textbitstrom an den Server zu senden.

Das ist nicht korrekt, da das Betriebssystem den Überblick über die verwendeten/unverwendeten Ports behält und die Ports den Streams zuweist, wenn eine neue Verbindung hergestellt wird.

Wenn ein TCP-Paket beim Server ankommt, wird es daraufhin untersucht, ob es an den Port 80 gerichtet ist. Wenn dies der Fall ist, wird es an den Serverprozess weitergeleitet. Nun hat das TCP-Protokoll seine Arbeit beendet und es ist Zeit für das Serverprogramm, in Aktion zu treten.

Hier sehe ich zwei Details: Erstens scheint es so, als ob ein einziges TCP-Paket die gesamte HTTP-Nachricht enthält, was nicht unbedingt stimmt (die Nachricht kann aus verschiedenen Gründen in mehrere TCP-Pakete aufgeteilt werden, vor allem aber, weil die Pakete eine feste Höchstlänge haben und die Nachricht länger als diese Länge sein kann). Zweitens wird davon ausgegangen, dass der Webserver auf Port 80 läuft, was normalerweise der Fall ist, aber nicht immer zutrifft. Ich glaube zum Beispiel, dass der Standardport für den Apache Tomcat Webserver 8080 ist, und in den meisten Fällen kann der Port, auf den der Webserver hört, konfiguriert werden (ich kenne keinen Webserver, der zu 100% auf einen speziellen Port festgelegt ist).

Schließlich, wenn Sie sagen

Wenn eine Adresse in den Webbrowser eingegeben wird, wählt der Webbrowser die richtige HTTP-Methode und erstellt eine vollständige HTTP-Anfrage.

Ich denke, dass in diesem speziellen Fall (der Benutzer hat eine Adresse eingegeben und die Eingabetaste gedrückt) der Browser immer die GET-Methode wählen wird, da POST verwendet wird, wenn Informationen an den Server übermittelt werden.

HTTP ist auf den ersten Blick recht einfach, hat aber viele Details, die es noch komplexer machen. Ich bin weit davon entfernt, ein Experte auf diesem Gebiet zu sein, aber vielleicht kann dies weiterhelfen :) http://www.faqs.org/rfcs/rfc2616.html

1voto

MattJ Punkte 7809

TCP ist ein Transportprotokoll. Es beschreibt, wie ein Strom beliebiger Daten von einem Netzwerkpunkt zu einem anderen gelangen kann. Dies ist etwas, was fast jede Netzwerkanwendung tun muss, daher ist es sinnvoll, dies in das Betriebssystem einzubauen (es muss nicht sein, aber es ist jetzt Standard in jedem gängigen Betriebssystem).

Der Datenaustausch zwischen zwei Rechnern/Anwendungen reicht jedoch nicht ganz aus - sie müssen sich auch darauf einigen, wie die Daten formatiert werden (ein Protokoll). Es gibt viele verschiedene Möglichkeiten, wie Daten formatiert werden können, und die beste Methode hängt von der Art der Daten und der Art der Anwendung ab.

HTTP wurde speziell als Anfrage-/Antwortprotokoll auf der Grundlage von TCP entwickelt, kann aber über jedes Transportprotokoll laufen. Bei HTTP ist keine Base64-Kodierung der Daten erforderlich, da der Empfänger die Nutzdaten nicht untersuchen muss, um festzustellen, wann sie enden, denn die Nutzdaten können alles Mögliche enthalten. HTTP verwendet einen Längen-Header, um dem Empfänger mitzuteilen, wie viele Daten die Nachricht enthält.

Andere Anwendungen können andere Protokolle wählen, die auf TCP aufsetzen. HTTP hat zum Beispiel keine Möglichkeit, einem Server zu erlauben, eine Nachricht an den Client zu senden, außer als Antwort auf eine Anfrage. Ein anderes Protokoll wäre besser geeignet, wenn dies erforderlich ist; dies ist in etwa das, was Websockets zu erreichen versuchen.

0voto

Michael Lowman Punkte 2940

Ausschließlich als Antwort auf Ihre Fragen zum Hochladen/Herunterladen von Dateien:

Bei einer Beschränkung auf HTTP erfolgt das Herunterladen von Dateien in der Regel, indem ein Browser einem Link zu einer herunterladbaren Datei folgt, woraufhin eine GET-Anfrage für diesen Inhalt gesendet wird. Die Daten werden über die HTTP-Verbindung auf die gleiche Weise wie eine Webseite gesendet.

Der häufigste Fall eines Datei-Uploads ist die Übermittlung eines Formulars; der Benutzer wählt eine Datei als Teil eines Formulars aus. Nach dem Anklicken der Schaltfläche "Submit" sendet der Browser ein POST an den Server. Als Teil des POST wird eine Begrenzungszeichenfolge zugewiesen, und die Bytes der Datei werden zwischen der Begrenzungszeichenfolge gesendet, damit der Server sie erkennen kann.

Es gibt noch andere Möglichkeiten, aber diese sind am häufigsten.

Es gibt keine in HTTP integrierte Möglichkeit, das Laden einer Datei als base64-String zu unterstützen. In Webseiten enthaltene Dateien, wie z. B. Bilder, werden in separaten Anfragen angefordert: jede Ressource wird mit einer GET-Anfrage abgerufen. Es wäre jedoch möglich, Daten aus einer Base64-Zeichenkette mit Hilfe von Javascript zu parsen und sie zu einer Ressource zusammenzusetzen. Dies würde aufgrund des komplexen Codes und der erforderlichen Verarbeitung nicht gemacht werden, ist aber möglich.

Was Ihre Analyse der Netzkommunikation betrifft, so scheint sie mir ziemlich korrekt zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X