Zur Übersicht
Die Zustandslosigkeit
Der Nachteil der Intelligenz besteht darin, dass man ununterbrochen gezwungen ist, dazuzulernen.
George Bernard Shaw
Das HTTP Protokoll(Hypertext Transfer Protokoll) spielt eine zentrale Rolle bei der Entwicklung von Webapplikationen. Mit Hilfe des Protokolls werden die Informationen vom Client, in der Regel ein Browser, zum Server, in der Regel ein Java Applikationsserver transportiert. Als Rückgabe also in umgekehrter Richtung sendet der Server das Response an den Client. Das Http Protokoll gilt für alle Arten der dynamischen Webprogrammierung, wie PHP oder auch ASP etc, also nicht nur für Java Web. Ich werde das Protokoll aber aus Sicht der Java Webprogrammierung darstellen.
Zusammenfassung der wichtigen Abläufe.
Der Client, der in der Regel ein Browser ist, setzt mithilfe einer Anfrage (Request) die Netzwerkkommunikation in Gang. In der Regel reicht es in der Browser Adresszeile eine gültige Internetadresse einzugeben und diese mit der Entertaste abzusenden. Das nennt man einen Request. Durch das Absenden der Adresse und das Auftreffen der Anfrage auf dem Server dem diese gültige Adresse gehört, wird das Response auf dem Server erstellt (in der Regel mit den hier vorgestellten Programmiertechniken) und zum anfragenden Browser zurückgesendet. Der Response beinhaltet die jeweilige Information der angeforderten Seite. In der Regel wird bei nur Eingabe der Domain (z.b. www.google.de) eine index.html oder index.php oder auch index.jsp zum Client gesendet. Die Bezeichnung index in diesem Zusammenhang, hat eine untergeordnete Bedeutung. Wir werden im weiteren Verlauf sehen das die erste Seite durchaus auch anders heißen kann.
Nachdem der Response beim Client angekommen ist wird die Verbindung geschlossen. Das bedeutet weitere Informationen gibt es nur auf weitere Anfragen. Jede Anfrage ergibt eine vom Server erstellte Antwort. Jedes Mal wird dabei eine neue Verbindung zum Server aufgebaut und umgekehrt zum Client. Der Vorteil dieser Technik ist, dass keine Verbindung gehalten werden muss. Dadurch ist eine Vielzahl von Clients in der Lage gleichzeitig einen Webserver (Applikationsserver) zu benutzen. Es kann durchaus möglich sein das beim ersten Request die Daten über den Atlantik gesendet werden, aber über den Südpazifik dann das Response zurückkommt.
Damit der Server auch weiß, wer die jeweilige Anfrage gestellt hat, sendet jeder Client einen so genannten HTTP Header. In diesem Header werden verschiedene Informationen des Clients neben der Anfrage an den Server gesendet. Unter anderem die jeweilige aktuelle IP-Adresse mit dem der Client im Internet eindeutig identifiziert und auch adressiert werden kann. An diese Adresse wird dann auch das Response (also die Antwort) gesendet.
Der Vorteil der Zustandslosigkeit ist die nicht zu haltende Verbindung, und damit auch die nicht benötigten Serverresourcen für das Halten der Verbindung. Das Internet alleine weiß wo und wie die Verbindung zum Client oder auch zum Server aufgebaut werden muss. Damit wird der jeweilige Webserver (Applikationsserver) nicht belastet. Die dabei gewonnen Systemresourcen können für die Bereitstellung weiterer Request genutzt werden. Das Gegenteil einer zustandslosen Verbindung ist übrigens eine zustandsbehaftete Verbindung.
Das Versenden und das damit verbundene Routen geschieht über das DNS-System das im Internet ein nicht zu unterschätzendes Schattendasein führt. Mit dem DNS-System werden wir uns hier nicht weiter auseinandersetzen.
Eine typische zustandsbehaftete Verbindung
Wenn man an das Arbeiten mit zustandsbehafteten Protokollen gewohnt ist, ist das zustandslose HTTP Protokoll sicherlich etwas gewöhnungsbedürftig.
Z.B. ist eine Datenbankverbindung typischerweise eine zustandsbehaftete Verbindung. Bevor eine Datenbankabfrage (Select, Delete etc.) abgesendet werden kann, muss eine Connection auf die Datenbankmaschine aufgebaut werden. Erst nachdem die Connection steht, kann der Entwickler oder das vom Entwickler geschriebene Programm die Abfragen an die Datenbank senden. Wird die Verbindung nicht mehr benötigt, sollte die Connection geschlossen werden, damit der Datenbankserver keine weiteren Ressourcen für die erstellte Verbindung mehr verbraucht.
Wie speichere ich dann meine Nutzerdaten
Das HTTP Protokoll ist Zustandslos. Gegenüber der herkömmlichen Programmierung, also Anwendungen die auf dem Desktop laufen, sind Entwickler gewohnt die Variablen maximal über die Laufzeit eines Programms zu halten. Bei der Webprogrammierung sind wir den HTTP Protokoll verpflichtet. Dort wird durch die Zustandslosigkeit des Protokolls spätestens nach der Versendung des Response die Variablenzustände zurückgesetzt.
Um somit über den Response hinaus eine Speicherung der Daten im Arbeitsspeicher zu gewährleisten, bedient man sich im Java Web der Scopes. Die 3 (eigentlich 4) in den Java Web Grundlagen näher erläuterte Scopes sind dafür verantwortlich. Die jeweilige Gültigkeit sorgt dafür, dass der Java Web Programmierer in die Lage versetzt wird, Daten während einer Web-Sitzung Benutzer spezifisch über einen Request-Response Zyklus hinaus, im Arbeitsspeicher des Servers abzulegen. Natürlich könnte man diese Daten auch in einer Datenbank ablegen, aber dann hätten wir die typische 2-Tier Architektur, die in den meisten Fällen bei modernen Webanwendungen nicht ausreicht.
Welche Request-Methoden gibt es im Http-Protokoll?
Das HTTP-Protokoll bietet eine ganze Reihe von Methoden, bei den die Post und die Get-Methode sicherlich die am häufigsten benutzten sind.
Methodenname | Aufgabe |
GET | fordert vom HTTP Server eine Webresource an. Es können auch Parameter bei der Anforderung übergeben werden. Parameter werden in der URL(maximal 256 Bytes) übertragen. |
POST | sendet Parameter im Request Header an den Server und erwartet natürlich ein darauf basierendes Response. Anzahl und Größe der Parameter sind theoretisch unbegrenzt. |
PUT | sendet Dateien an den HTTP Server. |
DELETE | löscht eine Webresource, die z.B. mit PUT hochgeladen wurden. |
TRACE | kann zu Prüfung der Verbindung genutzt werden. |
HEAD | weist den Server an den HTTP-Header zu senden. |
OPTIONS | liefert eine Liste mit Methoden und Features des Servers. |
CONNECT | für Proxy-Server für spezielle Verschlüsselung. |
Welche Datentypen(MIME oder Content Typen) kann ich senden
Bei einer reinen Web-Applikation wird es im Normalfall nur den Content-Type text/html geben. Aber moderne Webanwendungen (Webapplikationen) setzten auch immer stärker Multimediadaten ein, die direkt oder indirekt von anderen Programmen dargestellt werden. Dies sind z.B. Video-Daten, Audio-Daten, spezielle Anwendungsdaten wie Word-Dokumente, Excel-Mappen etc. um diese Daten per Response zu erhalten, kann der Webentwickler diese Daten so über den Mime-Type oder Content Type festlegen, welche Datenformate als Response gesendet werden. Folgende Haupttypen gibt es:
Mime Type |
Aufgabe |
text | Im Beispiel wird als Haupttyp text angegeben und nach dem Schrägstrich der Untertyp. Als Untertyp ist hier einfacher Text ohne Formatierung bzw. html vordefiniert: text/plain oder auch text/html |
image | Als Untertyp für Bilder der Format. JPEG definiert: image/jpeg. Als Untertyp für Bilder des Formats png :image/png |
audio | audio Daten werden gesendet. |
video | Video Daten werden gesendet. |
application | Dieser Haupttyp ist für Daten von Anwendungsprogrammen vorgesehen. Vordefiniert sind zwei Untertypen:
|
Es sollen absichtlich nicht alle Mime-Typen aufgezählt werden, das würde sicherlich den Rahmen dieses Buches sprengen. Die noch fehlenden Mime-Types können z.B. auf Wikipedia unter dem Artikel MIME-Types nachgeschlagen werden. Interessant ist die Tatsache, dass die Haupttypen festgelegt sind und die Unter oder auch Suptypes hier noch sehr viel mehr sind als die an zwei Händen abzählbaren Haupttypen. Z.B ein Video können Sie als mpeg aber auch als ogg Format zum Client senden, ähnliches gilt auch für die unzähligen Grafik und Audioformate.
Überlegen dir doch mal den Content-Type für ein PDF?
Die Auflösung erfolgt im weiteren Teil des Tutorials.
Hier sollte das Prinzip der Zustandslosiggkeit verstanden worden sein. Wenn nicht, einfach eine Frage im Kommentar stellen!
0 Kommentare