Den Kern einer AJAX-basierten Anwendung stellt die Verwaltung von nebenläufigen HTTP-Transaktionen dar, die vom Webbrowser initiiert werden, um neue Daten vom Server zu erhalten. Viele der hier gezeigten Techniken basieren auf bestimmten Eigenschaften von HTTP, deren Kenntnis eine Voraussetzung für das Verständnis der Funktionsweise von AJAX ist.
Eingangs dieses Kapitels wurde bereits der grundsätzliche Ablauf von Transaktionen im Client/Server-Modell erläutert, den Schematischer Ablauf einer HTTP-Transaktion noch einmal bildlich darstellt.
Der vom Browser gesendete Request gelangt zum Server und wird dort verarbeitet. Das Ergebnis dieser Operation wird anschließend in einer HTTP-Response dem anfragenden Client mitgeteilt. Anfrage und Antwort unterscheiden sich nur geringfügig im syntaktischen Aufbau, wie Schematischer Aufbau von HTTP-Nachrichten zeigt.
Deutlich zu erkennen ist die unterschiedlich aufgebaute erste
Zeile der beiden Nachrichten. Im HTTP-Request gibt diese Zeile die
auszuführende Aktion an und benennt die Ressource, auf die sich
diese Aktion bezieht. Der dritte Eintrag dient zur Identifikation
des Protokolls HTTP und
der verwendeten Version, hier also Version 1.1. In diesem Beispiel
wird also ein GET-Request bezogen
auf die Ressource „/webhp?complete=1“
des kontaktierten Servers gesendet. Auf die Startzeile des Requests
folgt eine Reihe von Header-Feldern in fast
beliebiger Reihenfolge, die den Request genauer beschreiben. Jedes
Header-Feld besteht aus einem Namen und einem Wert, die durch einen
Doppelpunkt voneinander getrennt sind. Die Werte gleichnamiger Header-Felder
können in einem Header zusammengefasst werden, indem sie mit einem
Komma getrennt werden. Die wichtigsten Header-Felder in diesem Request
sind:
Accept
Enthält die Angabe der erlaubten Medientypen wie in Dokumentformat für Webseiten beschrieben.
Accept-Language
Gibt eine Liste der Sprachen an, die der Benutzer
als Präferenz in seinem Browser eingestellt hat. Jeder Eintrag kann
mit einem Parameter q zur Gewichtung
versehen werden.
Accept-Charset
Spezifikation der akzeptierten Zeichenkodierungen, in denen die Inhaltsinformationen vorliegen dürfen. Für XML-Dokumente sollte hier zumindest UTF-8 erlaubt werden, um größtmögliche Kompatibilität zu erhalten.
Accept-Encoding
Die zur Übertragung der Inhaltsinformationen verwendete
Kodierung. Anders als z. B. das Simple Mail Transfer Protocol (SMTP
)
erfordert HTTP keine Umkodierung
von Binärdaten, um eine fehlerfreie Übertragung zu gewährleisten.
Daher wird dieser Parameter oft den Wert „identity“
enthalten. Nützlich ist dieses Header-Feld vor allem, wenn eine
Kompression während der Übertragung erzwungen werden soll. In diesem
Fall kann als Wert „gzip“ oder
„compress“ angegeben -werden.
Host
Enthält den Server-Namen aus dem URI der angefragten Ressource,
ggf. mit zusätzlicher Portnummer, falls nicht der Standard-Port 80 für HTTP verwendet
wird. Mit dieser Angabe kann ein Server Anfragen für mehrere virtuelle
Hosts auf einem Port behandeln.
Die Antwort des Servers beginnt mit einer Statuszeile, die
neben der Identifikation des Protokolls und der Versionsnummer einen
dreistelligen Statuscode sowie
eine textuelle Beschreibung des Ergebnisses enthält. Die erste Ziffer
des Statuscodes gibt Aufschluss über die Art der Meldung, damit
Clients auch Antworten mit unbekannten Statuscodes korrekt verarbeiten
können. Die Tabelle Statuscodes in HTTP zeigt die Bedeutung
der Statusklassen, wie sie in RFC 2616 RFC 2616: Hypertext Transfer Protocol -HTTP/1.1 definiert wurde. Die textuelle
Beschreibung nach dem Statuscode ist rein informativ und kann z. B.
einem Benutzer angezeigt werden, wenn der Browser die genaue Bedeutung
des Statuscodes nicht kennt. Die am häufigsten angezeigten Meldungen
sind vermutlich die Fehlercodes 403 und 404
mit
ihren textuellen Entsprechungen „Forbidden“ und „Not Found“.
| Code | Beschreibung |
|---|---|
1xx
|
Kennzeichnet eine vorläufige Antwort zur Information über den Status der Bearbeitung. Die Transaktion wird mit einer 1xx-Antwort nicht beendet. |
2xx
|
Die Anfrage wurde erfolgreich bearbeitet und das Ergebnis ist der Antwort beigefügt. |
3xx
|
Die angefragte Ressource ist nicht auf dem Server verfügbar, sondern kann von einer anderen Quelle bezogen werden, die in der Antwort benannt ist. |
4xx
|
Die Anfrage war fehlerhaft und kann deswegen nicht bearbeitet werden. |
5xx
|
Bei der Verarbeitung der Anfrage ist auf dem Server ein Fehler aufgetreten, der nicht unmittelbar mit dem Request zusammenhängt. |
Antworten mit einem Statuscode zwischen 100 und 199 stellen
eine Besonderheit in HTTP dar,
da sie die Transaktion nicht beenden. Sie können beispielsweise
bei einem Datei-Upload verwendet werden, um vor der Übertragung
einer Datei zu signalisieren, dass die Operation Erfolg haben wird.
Dadurch kann der Client das Senden umfangreicher Daten verzögern,
bis entweder eine Antwort mit dem Statuscode 100 als Aufforderung
zum Fortsetzen der Sendeoperation oder eine entsprechende Fehlernachricht
empfangen wurde.
Der Statuszeile der Antwort folgt wie bei der Anfrage eine
Reihe von Header--Feldern, die weitere Informationen über das Ergebnis
der Operation enthalten, -beispielsweise zur Steuerung des Seiten-Cache im Browser.
Den wichtigsten Teil der Antwort stellen in den meisten Fällen aber
die Inhaltsinformationen dar, die nach dem Block mit den Header-Feldern
folgen und mit einer Leerzeile davon getrennt werden. Abhängig von
der Art der Anfrage und der Serverkonfiguration kann es sich bei
den Inhaltsinformationen um beliebige Daten handeln, solange diese
den in der Anfrage spezifizierten Eigenschaften entsprechen (Anfrage-Header Accept, Accept-Language, Accept-Encoding und Accept-Charset).
Damit der Client die in der Antwort enthaltenen Inhaltsinformationen verarbeiten kann, werden der Medientyp, die verwendete Sprache und die Zeichenkodierung im Header-Bereich beschrieben. Die dazu verwendeten Felder entsprechen in ihrer Namensgebung den Header-Feldern aus der Anfrage, mit denen der Client seine Präferenzen ausgedrückt hat. Die folgende Übersicht zeigt die wesentlichen Header-Felder zur Beschreibung der Inhaltsinformationen einer HTTP-Antwort:
Content-Type
Spezifiziert den Medientyp der Inhaltsformationen
in der Antwort wie in Dokumentformat für Webseiten beschrieben;
in einem Parameter charset wird
auch die Information über den in der Antwort verwendeten Zeichensatz
untergebracht, soweit hier anwendbar.
Content-Language
Gibt die gewählte Sprache des Dokuments in der Antwort an.
Als zustandsloses Protokoll bietet HTTP keine eingebaute Unterstützung für transaktionsübergreifende Sessions zwischen Browser und Server. Das bedeutet, eine webbasierte Anwendung ist selbst für die Erzeugung und Verwaltung persistenter Zustandsinformationen verantwortlich. Die Synchronisation zwischen Client und Server erfolgt mit Hilfe einer Erweiterung des Protokolls HTTP, die zusätzliche Header-Felder zur Übertragung Session-spezifischer Daten erlaubt (siehe Persistent Client State - HTTP Cookies). Ursprünglich von der Firma Netscape entwickelt, wird diese Protokollerweiterung von praktisch allen modernen Browsern unterstützt. (Cookies wurden später als RFC 2109 RFC 2109: HTTP State Management Mechanism standardisiert; die dort vorgenommenen Änderungen haben sich aber nicht alle durchgesetzt. Ein weiterer Versuch der Weiterentwicklung durch Standardisierung, RFC 2965, hat noch weniger praktische Bedeutung.) Die Funktionsweise des Cookie-Mechanismus illustriert Verwendung von Cookies für persistente Zustandsinformationen.
Das Bild zeigt die Verwendung der Header-Felder Set-Cookie
und Cookie zum Übermitteln
von Zustandsinformationen. Zu Beginn der Sitzung wird ein Cookie in
einer Antwortnachricht des Servers mit dem Headerfeld Set-Cookie gesetzt. Der Wert des
Headers besteht aus einem Bezeichner für die Zustandsvariable, gefolgt
von einem Gleichheitszeichen und dem zu speichernden Wert. Der Browser, der
diese Antwort erhält, speichert nach einer Sicherheitsprüfung den
Wert unter dem angegebenen Namen, um diese (Name und Wert) in folgenden
Requests im Headerfeld Cookie wieder an den
Server zu senden.
Neben dem Namen und dem aktuellen Wert des Cookie kann der Server im -Headerfeld Set-Cookie noch weitere Parameter angeben, mit denen sich das Verhalten des Clients genauer steuern lässt. Die folgende Übersicht zeigt die in der ursprünglichen Spezifikation von Netscape vorgesehenen Parameter mit ihrer Bedeutung, wie sie auch heute noch in webbasierten Anwendungen verwendet werden.
expires
Gibt den Zeitpunkt an, bis zu dem ein Cookie gültig
ist. Das Format folgt dem mit RFC 822 etablierten Format zur Spezifikation
von Zeit und Datum in E-Mail-Nachrichten. Um einen Cookie zu löschen
wird einfach ein Datum in der Vergangenheit angegeben, etwa:
Thu, 01-JAN-1970 00:00:00 GMT.
In der standardisierten Fassung der Cookie-Spezifikation wurde
der Parameter expires durch
den robusteren Parameter Max-Age abgelöst,
der angibt, wieviele Sekunden der betreffende Cookie noch gültig
ist. Da die meisten Browser jedoch die ältere Version implementieren, ist
eine Verwendung von expires in
eigenen Anwendungen ratsam.
domain
Schränkt den Domainbereich ein, für den ein Cookie Gültigkeit besitzt. Der Wert entspricht mindestens einer Second-Level-Domain, d. h., ein Cookie kann nicht für das gesamte Internet oder eine Top-Level-Domain freigegeben werden. Der Browser verwendet diese Angabe intern zur Erzeugung eines hierarchischen Namensraums, durch den gleichnamige Zustandsattribute verschiedener Server unterschieden werden. Natürlich akzeptiert ein Browser ausschließlich Cookies von Servern, die zur angegebenen Domain gehören.
path
Der Parameter path erlaubt
eine weitere Strukturierung des Cookie-Namensraums. Beim Setzen
eines Cookies spezifiziert path den
URI-Präfix, für
den dieser Cookie gültig sein soll. In einem nachfolgenden Request
wird ein Browser den Cookie also nur dann aufführen, wenn der Beginn
des Request-URIs mit dem Wert von path übereinstimmt.
secure
Ein als secure attributierter
Cookie sollte vom Browser nicht über einen unsicheren Kanal an den
Server zurückgesandt werden. In der Praxis heißt dies heute, dass
der Browser den Cookie nur über TLS-Verbindungen (https://...) verschickt; damit ist
der Cookie besser gegen mögliches Abhören geschützt als wenn der
Browser ihn auch über ungesichertes HTTP versenden würde. (Selbst wenn
die Webanwendung selbst keine reinen HTTP-URIs verwendet, könnte
ohne Verwendung von secure ein sicherheitsrelevanter
Cookie durch manuelle Eingabe des Server-Namens im Zusammenhang
mit einem HTTP-URI kompromittiert werden - er würde vom Browser automatisch
im Klartext mit der HTTP-Anfrage verschickt, ohne dass der Server
Einfluss darauf hat.)
Die Syntax der oben angeführten Parameter entspricht weitgehend
der in RFC 2616 RFC 2616: Hypertext Transfer Protocol -HTTP/1.1 definierten Syntax für Parameter in Headerfeldern.
Der Parameter expires nimmt
hier eine Sonderrolle ein, da der angegebene Wert entgegen der Konvention
nicht in Anführungszeichen eingeschlossen wird.
(RFC 2965 sieht noch weitere Parameter und neue Headerfelder
vor, die in der Praxis allerdings eher geringe Bedeutung haben.
Um größtmögliche Kompatibilität mit bestehenden Browsern zu wahren,
sollte sich eine Anwendung nicht auf die -Existenz von Parametern
verlassen, die nicht in der obigen Liste aufgeführt sind. Eine Ausnahme
stellt der Parameter Version dar,
der in der ursprünglichen Cookie-Spezifikation nicht vorgesehen
ist. In der standardisierten Variante ist die Verwendung dieses
Parameters vorgeschrieben, so dass mit dieser Angabe eine Unterscheidung
zwischen beiden Versionen der Spezifikation möglich ist.)
In AJAX-basierten Anwendungen nimmt die transaktionsübergreifende
Synchronisierung von Zustandsinformationen naturgemäß eine bedeutende
Stellung ein, da hier zahlreiche kurzlebige Interaktionen zu einer
länger andauernden Sitzung zusammengefasst werden. Wie bei anderen
HTTP-Anfragen von Browsern werden auch bei XMLHttpRequest Cookies
gesendet und Set-Cookie-Header
aus der Antwort ausgeführt.
Anders als bei Dokumentformaten, DOM-Unterstützung oder CSS ist für den Austausch von Cookies kein Trend zur Implementierung des offiziellen Standards RFC 2965: HTTP State Management Mechanism zu erkennen. Statt dessen basieren die meisten Anwendungen auf der ersten von Netscape veröffentlichten Fassung, die damit den Rang eines Quasi-Standards erreicht hat.
Das WWW in seiner ursprünglichen Form war als verteiltes Informationssystem konzipiert, das einen Zugriff auf entfernte Datenspeicher ermöglichte. Nachdem anfänglich vorwiegend statische Dokumente über das WWW bezogen wurden, die als Datei auf dem Serversystem verfügbar waren, wurde schnell deutlich, dass der Dienst von Anfang an so entworfen war, dass auch dynamisch erzeugte Objekte mit beliebigem Typ über HTTP befördert werden können. DHTML und Remote Scripting führten diese Entwicklung fort, indem die dynamische Veränderung von Dokumenten nun auch auf der Clientseite stattfand.
AJAX-Technologien führen diesen Ansatz fort, indem die Interaktivität ein stärkeres Gewicht bekommt. Anstelle einzelner HTTP-Transaktionen, die jeweils ein für sich isoliertes Dokument im Ganzen ausliefern, tritt nun die Übertragung von Informationshäppchen, die im Browser zu einem größeren - und dynamisch veränderlichen - Gesamtbild zusammengesetzt werden. In Anlehnung an Nebenläufige HTTP-Transaktionen in AJAX-basierten Anwendungen den veränderten Ablauf der Kommunikation zwischen Browser und Server in einer AJAX-basierten Anwendung.
Deutlich zu erkennen ist in diesem Beispiel die hohe Frequenz, in der HTTP-Requests ausgesendet werden. Moderne HTTP-Server und -Clients erleichtern diese Art der Kommunikation, indem TCP-Verbindungen für die Dauer der Transaktionsfolge geöffnet bleiben, anstatt für jede Anfrage einen neuen Transportkanal zu öffnen. Die Zuordnung der Transaktionen auf dem Server erfolgt am einfachsten mit dem zuvor erläuterten Cookie-Mechanismus, über den ein eindeutiger Sessionbezeichner ausgetauscht werden kann.
In den bisherigen Ausführungen wurde nicht unterschieden,
welche Methode in der Startzeile von HTTP-Anfragen
aufgeführt wird. Die am häufigsten verwendete HTTP-Methode ist GET
.
Die Semantik von GET schließt
jedoch einen Seiteneffekt
, also
das Verändern des Serverzustands in einer Weise, die Rückwirkung
auf den Benutzer hat, aus: Es gibt zu viele Fälle, in denen Systemkomponenten
wie Browser oder Caches ohne weiteres Zutun des Benutzers entscheiden,
ein GET auszuführen (besonders
unangenehm ist das böswillige Unterschieben von automatisch verfolgten
Links, wie z. B. aus IMG-Elementen; vgl. auch Intertwingly: SAJAX Still Unsafe und Intertwingly: Taking the unsafe GETs out of Rails).
Je nach auszuführender Aktion kann es daher angebracht sein,
eine andere Methode als GET
einzusetzen;
insbesondere fallen Operationen wie das Abschicken von Bestellungen,
die Aktualisierung von Datenbanken, das Hinzufügen von Dateien oder
auch das Löschen von Ressourcen nicht in den Aufgabenbereich eines GET-Requests. Für diese Aufgaben
stehen in HTTP weitere Methoden zur Verfügung, von
denen einige auch in AJAX-basierten Anwendungen sinnvoll eingesetzt
werden können:
PUT
Dient zum Hinzufügen einer Ressource zum Datenbestand des Servers. Der URI des Requests bezeichnet den Namen, unter dem die übergebenen Inhaltsdaten abgelegt werden sollen.
Zu beachten ist, dass HTTP keineswegs vorschreibt, wie oder wo die Daten gespeichert werden sollen - dies kann im lokalen Dateisystem des Webservers geschehen, in einer eigenen Datenbank oder auf einem LDAP-Server.
POST
Wesentlich häufiger als PUT wird
in der Praxis POST verwendet. POST
dient
ähnlich wie PUT
zur Übertragung von
Inhaltsinformationen an einen Webserver. Anders als PUT werden mit POST Daten übertragen, die mit einer Ressource
im Zusammenhang stehen, aber typischerweise nicht mit dieser Ressource
identisch sind. Das häufigste Einsatzgebiet von POST ist die Übertragung ausgefüllter
Web-Formulare an einen Server. Anstatt die erhaltenen Werte unter
dem angegebenen Namen zu speichern, übergibt der Server die Daten
an die Anwendungslogik, die über den Anfrage-URI identifiziert wird.
Unabhängig davon, ob im konkreten Anwendungsfall PUT oder POST verwendet wird,
haben beide Methoden über die u. U. passendere Semantik hinaus gegenüber GET
den
Vorteil, dass problemlos größere Mengen an Daten übertragen werden können.
Jeder Web-Entwickler, der schon einmal vor der Entscheidung stand,
ob in einem Formular POST oder GET verwendet werden soll, kennt
dieses Problem: Während in einem POST-Request
die Daten im Inhalt der Nachricht übertragen werden, fügt der Browser
die Werte aus den Formularfeldern für einen GET-Request
dem URI hinzu.
Dies ist nicht nur unschön, sondern kann auch zu Problemen führen, wenn
Browser oder Server eine feste Obergrenze für die Länge der Startzeile
vorgeben.
Die Programmierschnittstelle von XMLHttpRequest bietet
zahlreiche Möglichkeiten zur Modifikation des abzusetzenden HTTP-Requests.
So kann die zu verwendende Methode beispielsweise in der Funktion open spezifiziert werden. Zwei weitere
Parameter ermöglichen zudem die Angabe von Benutzername und Passwort,
um eine Authentisierung beim Server zu ermöglichen. Versenden eines POST-Requests mit XMLHttpRequest und Versenden eines PUT-Requests mit XMLHttpRequest illustrieren
die Verwendung von XMLHttpRequest mit
den HTTP-Methoden POST und PUT zum Senden einer Datei an einen
Server. Bei POST werden der
Name und die zu speichernden Daten im Rumpf der HTTP-Nachricht übertragen,
der an die Funktion send übergeben
wird. Schließlich wird mittels setRequestHeader der Medientyp application/x-www-form-urlencoded
gesetzt,
um ein korrektes Parsieren der übertragenen Daten auf dem Server
sicherzustellen. Bei PUT muss
der Server Information über den Dateinamen aus dem Anfrage-URI ableiten
(im Beispiel gibt der Client darüber hinaus den Content-Type als XML vor).
In beiden Fällen kann der Server erfolgreiche Anfragen mit
den Antwortcodes 200
(„OK“) oder 204
(„No
Content“) beantworten; 200
steht dabei
für den Fall, dass in der Antwort noch eine beschreibende Ressource
(z.B. ein HTML-Dokument zur Anzeige für den Benutzer) mitgeliefert
wird, während 204
ein wortloses
OK ist. Die Anfrage kann, wenn eine neue Ressource angelegt wurde,
auch mit 201
(„Created“) beantwortet
werden (wie bei 200
mit einer
Ressource in der Antwort).
XMLHttpRequest
_body="filename="+escape(_filename)+"&content="+escape(_text);
var req = new XMLHttpRequest();
req.onreadystatechange = handleStateChange;
req.open('POST', '/serverscript.php', true, username, password);
req.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
req.send(_body);
XMLHttpRequest
var req = new XMLHttpRequest();
req.onreadystatechange = handleStateChange;
req.open('PUT', '/path/' + escape(_filename), true, username, password);
req.setRequestHeader('Content-Type',
'application/xml');
req.send(_text);

Home • Über uns • Qualität • AGB • Impressum • Stadtlupe • Stellenangebote & Jobs
Die TEIA AG bietet Bücher, Lernprogramme, SCORM und kostenlose Online Kurse zu Microsoft-Anwendungen, Open Office, IT, Programmierung und Wirtschaft.
Zu fast allen Online Kursen können zudem Zertifkate oder Teilnahmebescheinigungen erworben werden.
Access 2002 • Access 2003 Basis • Access 2003 Prof. • Access 2007 Basis • Adobe GoLive • Adobe Photoshop • AJAX • Allgemeine Betriebswirtschaftslehre • Apache • Basiswissen für Selbstständige • Bewerbungstipps • Calc Basis • Dreamweaver CS4 • eBusiness • eCommerce • eGovernment • Erinnerung an Douaumont • Excel 2002 • Excel 2003 Basis • Excel 2003 Prof • Excel 2007 Basis • Excel 2007 Prof. • Excel 2010 Basis • Finanzmanagement • HTML • HTML CSS • HTML Grundlagen • Industriegütervertrieb • Internet Technik • JAVA • JavaScript • Lernen ohne Lehrer • Marketing • Markup-Sprachen • Organisation und Technologiemanagement • osCommerce • Outlook 2003 • Outlook 2007 • Perl und CGI • Personalmanagement • PHP 4.3 • PowerPoint 2003 • Powerpoint 2007 • Powerpoint 2010 • Projektmanagement und MS Project 2000 • Projektplanung und Projektoptimierung mit MS Project 2003 • Rechnungswesen mit Beispielen • Sicher auftreten • SQL • TEIA-Internet-Führerschein • Unternehmensführung • US-GAAP und IAS/IFRS • Vertragswesen eBusiness • Vista • VWL • Warum ich kein Christ sein will • Widerstand • Windows XP • Wirtschaftsrecht • Word 2002 • Word 2003 Basis • Word 2003 Prof. • Word 2007 Basis • Word 2007 Prof. • Writer Basis • XML • XML Grundlagen • XML XSL
Letzte Aktualisierung: 29.07.2010 13:03:17
Letzte Inhaltliche Überarbeitung: 29.06.2009 15:55:20
© 2000 - 2010 TEIA AG - Internet Akademie und Lehrbuch Verlag
Ihr Kommentar