Kapitel 9: HTTP und HTML
Transcription
Kapitel 9: HTTP und HTML
Kapitel 9: HTTP und HTML SoPra 2008 Kap. 9: HTTP und HTML (1/34) HTTP und HTML Entwickelt vom World Wide Web Consortium: • HTTP: hypertext transfer protocol Aktuell: HTTP/1.1 (1990-1999) als IETF-RFC 1945 (1996), 2068, 2069 (1997), 2616, 2617 (1999) • HTML: hypertext markup language Aktuell: HTML 4.01 (1994–1999), bzw. XHTML 1.1 (1999–2001) SoPra 2008 Kap. 9: HTTP und HTML (2/34) Aufruf einer Webseite URL: http://dante/page1.bu 1. Aufbau einer TCP Verbindung zu dante(.informatik.uni-augsburg.de), Port 80 2. Anfrage: GET /page1.bu HTTP/1.1 Tatsächlich: GET /page1.bu HTTP/1.1 Host: dante User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive SoPra 2008 Kap. 9: HTTP und HTML (3/34) Aufruf einer Webseite Die Datei: <html><head><title>Page 1</title></head> <body> <h1>Eine Überschrift</h1> </body></html> Die Server-Antwort: HTTP/1.1 200 OK Date: Wed, 03 May 2006 14:38:28 GMT Server: Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.8a Last-Modified: Wed, 03 May 2006 07:48:03 GMT ETag: "6442c2-59-412dd81e232c0" Accept-Ranges: bytes Content-Length: 89 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html SoPra 2008 Kap. 9: HTTP und HTML (4/34) Aufruf einer Webseite <html><head><title>Page 1</title></head> <body> <h1>Eine Überschrift</h1> </body></html> Das Ergebnis: SoPra 2008 Kap. 9: HTTP und HTML (5/34) HTML für Textlayout Die Datei: <html><head><title>Page 2</title></head><body> <h1 style="background-color:yellow;color:red; font-style:italic;"> Eine Überschrift</h1> </body></html> Das Ergebnis: SoPra 2008 Kap. 9: HTTP und HTML (6/34) Benutzerinteraktion in HTML HTML bietet mehr als nur Layout: Benutzerinteraktion durch Forms (= Formulare): <html><head><title>Page 3</title></head> <body> <h1>Bitte geben Sie etwas ein:</h1> <form action="page3.ta" method="get"> <input name="form1" type="text" size="30" maxlength="30"> </form> </body></html> SoPra 2008 Kap. 9: HTTP und HTML (7/34) Benutzerinteraktion in HTML SoPra 2008 Kap. 9: HTTP und HTML (8/34) Forms in HTML <form action="page3.ta" method="get"> 1. action=page3.ta: Beim Abschicken des Formulars (Return-Taste) fordere URL page3.ta an. 2. method=get: Hänge Eingabe an URL an. ⇒ GET /page3.ta?form1=was+denn%3F HTTP/1.1 SoPra 2008 Kap. 9: HTTP und HTML (9/34) Forms in HTML Andere method: post <form action="page4.ta" method="post"> <input name="form1" type="text" size="30" maxlength="30"> </form> HTTP: POST /page4.ta HTTP/1.1 Host: dante . . . Referer: http://dante/page4.bu Content-Type: application/x-www-form-urlencoded Content-Length: 17 form1=noch+was%3F SoPra 2008 Kap. 9: HTTP und HTML (10/34) Verarbeitung von Benutzereingaben • GET + erweiterte URL, POST mit Inhalt: Teil von HTTP • URL kann statt statischer Webseite ein Programm enthalten. page3.ta: #!/bin/sh echo echo echo echo echo "Content-type: text/html" "" "<html><head><title>Page 3</title></head>" "<body><h1>Ihre Eingabe war ${QUERY_STRING}</h1>" "</body></html>" SoPra 2008 Kap. 9: HTTP und HTML (11/34) Skripte • Webserver kann Programme von statischen Seiten unterscheiden (Endung, Anfang der Datei, . . . ) • Webserver versorgt“ Programm mit Argumenten: ⋆ ” GET /page3.ta?form1=was+denn%3F HTTP/1.1 ⇒ Umgebungsvariable QUERY STRING = form1=was+denn%3F ⋆ POST /page4.ta HTTP/1.1 ⇒ Inhalt wird dem standard input übergeben. (Im Skript oben: read in und ${in} ) SoPra 2008 Kap. 9: HTTP und HTML (12/34) Skripte HTTP/1.1 200 OK Date: Thu, 04 May 2006 16:25:14 GMT Server: Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.8a Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html <html><head><title>Page 4</title></head> <body><h1>Ihre Eingabe war form1=noch+was%3F</h1> </body></html> SoPra 2008 Kap. 9: HTTP und HTML (13/34) Skripte ⇒ Auf Browserseite läßt sich nicht zwischen Programm und statischer Seite unterscheiden. SoPra 2008 Kap. 9: HTTP und HTML (14/34) Weitere Forms • einzeiliger Text, mehrzeiliger Text, Passwörter • Auswahlliste, mehrfache Auswahl • Radiobuttons • Checkboxen • Datei-Upload • Buttons SoPra 2008 Kap. 9: HTTP und HTML (15/34) Buttons <form name="tbontb"> <input name="yes" type="button" value="To Be"> or <input name="no" type="button" value="Not To Be"> </form> SoPra 2008 Kap. 9: HTTP und HTML (16/34) Mehr Interaktion Klick eines Buttons bewirkt nichts ⇒ Neue Konzepte zur Interaktion: • Events (HTML 4.0) • JavaScript ⋆ nicht Teil von HTML ⋆ JavaScript 1.1 (Netscape, 1996), 1.6 (z.B. Firefox), • Document Object Model (W3C Recommendation) SoPra 2008 Kap. 9: HTTP und HTML (17/34) Events und JavaScript in HTML <input name="yes" type="button" value="To Be" onclick="S(’Ok!’);"> Event: onclick (beim Drücken des Button) Aktion: JavaScript Methode S(’Ok!’) ausführen: <script type="text/javascript"> <!-function S(s) { document.getElementById(’Here’).firstChild.nodeValue=s; } //--> </script> SoPra 2008 Kap. 9: HTTP und HTML (18/34) JavaScript in HTML • script Deklaration (hier: JavaScript, könnte alles sein) • <!-- und //--> Trick, um Parser-Fehler zu vermeiden • function S() { ...} Java-ähnlicher Programmcode ⋆ objektorientiert ⋆ keine selbstdefinierten Klassen ⋆ interpretiert ⋆ untypisiert ⋆ vollständig andere API • Wie kann JavaScript die HTML-Seite verändern? SoPra 2008 Kap. 9: HTTP und HTML (19/34) Document Object Model – DOM • Eine HTML-Seite ist ein XML Dokument <tag> . . . </tag> • XML Dokument hat Baumstruktur <body> bubu <h1 id="Here"> </h1></body> BODY uu u uu u uu u u ” bubu ” GG GG GG GG H1 Here ”” • document.getElementById(’Here’).firstChild.nodeValue=s; setzt Text unterhalb von H1 auf s SoPra 2008 Kap. 9: HTTP und HTML (20/34) Zusammengefasst <html><head><title>Page 6</title> <script type="text/javascript"> <!-function S(s) { document.getElementById(’Here’).firstChild.nodeValue=s; } //--></script></head><body> <form name="tbontb"> <input name="yes" type="button" value="To Be" onclick="S(’Ok!’);"> or <input name="no" type="button" value="Not To Be" onclick="S(’Really?’);"> </form> <h1 id="Here"> </h1> </body></html> SoPra 2008 Kap. 9: HTTP und HTML (21/34) Ergebnis SoPra 2008 Kap. 9: HTTP und HTML (22/34) DHTML DHTML = dynamic HTML Events können an unerwarteten Orten verarbeitet werden: Langweilig ... <h1 id="H" onClick="document.getElementById(’H’) .firstChild.nodeValue=’Wirklich!’"> Ich bin dynamisch</h1> Noch langweiliger ... SoPra 2008 Kap. 9: HTTP und HTML (23/34) Zurück zum Server <html><head><title>Page 8</title> <script type="text/javascript"> <!-function S(a) { document.Hid.xtra.value = a; document.Hid.submit(); } //--></script></head><body> <form name="Hid" action="page8.ta" method="post"> <input type="hidden" name="xtra" value=""> </form> Langweilig ... <h1 onClick="S(’Nein’);">Ich bin dynamisch</h1> Noch langweiliger ... </body></html> SoPra 2008 Kap. 9: HTTP und HTML (24/34) Was passiert? Server antwortet mit neuer, fast identischer Webseite: SoPra 2008 Kap. 9: HTTP und HTML (25/34) Antwort des Server <html><head><title>Page 8</title> <script type="text/javascript"><!-function S(a) { document.Hid.xtra.value = a; document.Hid.submit(); } //--></script></head><body> <form name="Hid" action="page8.ta" method="post"> <input type="hidden" name="xtra" value=""> </form> Langweilig ... <h1 onClick="S(’Nein’);">Wirklich?</h1> Noch langweiliger ... </body></html> . . . das merkt man (eventuell) . . . SoPra 2008 Kap. 9: HTTP und HTML (26/34) Noch mehr Interaktion AJAX (Asynchronous JavaScript and XML) Idee: Anfragen an den Server stellen, ohne die Seite neu zu laden ⇒ (dynamische) Änderung einer existierenden Seite durch den Server SoPra 2008 Kap. 9: HTTP und HTML (27/34) Noch mehr Interaktion AJAX (Asynchronous JavaScript and XML) Idee: Anfragen an den Server stellen, ohne die Seite neu zu laden ⇒ (dynamische) Änderung einer existierenden Seite durch den Server 1. src-Attribut eines Bildes setzen: Browser lädt neues Bild und zeigt es an 2. src-Attribut eines script-Tags setzen: Browser lädt neue Javascript-Methoden oder Daten, die man dann aufrufen kann 3. per XMLHttpRequest HTML nachladen und in die Seite einbauen 4. beliebiges XML-Dokument laden und verarbeiten 5. JavaScript-Objekte laden und verarbeiten (application/json: JavaScript Object Notation) SoPra 2008 Kap. 9: HTTP und HTML (27/34) AJAX zentrales Konzept: In JavaScript HTTP sprechen: • Request erzeugen http req = new XMLHttpRequest(); • Funktion setzen, die bei Antwort aufgerufen wird http req.onreadystatechange = fun; • An den Server schicken http req.open(’GET’, "http://dante/page8.ta", true); http req.send(null); • Antwort verarbeiten http req.responseText SoPra 2008 Kap. 9: HTTP und HTML (28/34) AJAX: Beispiel <html><head><title>Page 9</title> <script type="text/javascript" language="javascript"> <!-var c = 0; function S() { var url = "http://dante/page9.ta"; var http_req; http_req = new XMLHttpRequest(); http_req.onreadystatechange=function() { T(http_req); }; http_req.open(’POST’, url, true); http_req.send(c++); } SoPra 2008 Kap. 9: HTTP und HTML (29/34) AJAX: Beispiel (2) function T(http_request) { document.getElementById(’Here’).firstChild.nodeValue = http_request.responseText; } //--> </script> <body> Langweilig ... <h1 id="Here" onclick="S();">Ich bin dynamisch</h1> Noch langweiliger ... </body></html> SoPra 2008 Kap. 9: HTTP und HTML (30/34) AJAX: Die Serverseite #!/bin/sh read in if [ $in -eq 0 ]; then res="Wirklich?" else res="Wirklich? (${in})" fi echo "Content-type: text/html" echo "" echo $res SoPra 2008 Kap. 9: HTTP und HTML (31/34) AJAX: Das Ergebnis SoPra 2008 Kap. 9: HTTP und HTML (32/34) AJAX: Die Serverseite 1. Feste Datei im Dateisystem Nachteil: statisch 2. Skript, das Antwort generiert (php, perl, . . . ) Nachteil: Antwort (XML, json, . . . ) muss ‘von Hand’ generiert werden 3. ASPX-Seite ohne statische Anteile (Response.write(. . . )) Nachteil: Böser Hack 4. Webservice (Bei ASP.NET: .asmx) Vorteil: Kaum Programmieraufwand (.net Framework hat sehr gute Unterstützung für SOAP/json) Nachteil: Datenformate müssen eingehalten werden SoPra 2008 Kap. 9: HTTP und HTML (33/34) HTTP und HTML: Zusammenfassung • Eine Webseite/URL muss nicht statisch sein, kann dynamisch bei Anfrage erzeugt werden. • HTML bietet einfache Möglichkeiten zur Benutzerinteraktion. • Mit JavaScript lassen sich Webseiten dynamisch“ gestalten und mehr Interaktion ist möglich. ” • GUI-Design muss auf Browser Rücksicht nehmen (sehr eingeschränkte Pop-ups, große Fenster, nur linke Maustaste, Browser hat eigene Toolbar, Statuszeile etc.) SoPra 2008 Kap. 9: HTTP und HTML (34/34)