Das Hypertext Transfer Protokoll HTTP/1.1

Ähnliche Dokumente
Netzwerke und Verteilte Systeme: TCP/IP. (Vorabversion der Umdrucke)

Bemerkung: Jede Ressource sollte über einen. Ressource A. Ressource. eindeutigen Namen verfügen. Ressource F. Ressource. Ressource E.

!"# $ % Internet Protokolle: HTTP 1/38

Anwendungsprotokolle: HTTP, POP, SMTP

Rechnernetze Übung 12

2 Hypertext Transfer Protocol (HTTP)

Themen. Anwendungsschicht DNS HTTP. Stefan Szalowski Rechnernetze Anwendungsschicht

Motivation. Inhalt. URI-Schemata (1) URI-Schemata (2)

Literatur. [12-5] Upgrading to TLS Within HTTP/1.1 Netzwerke - WS 2013/14 - Teil 12/HTTP

1. Übung zur Vorlesung "Einführung in Verteilte Systeme"

HTTP Kommunikation (1)Request. HTTP - Überblick. HTTP Kommunikation (3) HTTP Kommunikation (2) Beispiel: Die folgende URL werde angefordert (Request)

IETF RFCs und W3C Recommendations. Internet Protokolle Jens Olderdißen WS 2003/04

Internet Protokolle Thema: HTTP Gruppenarbeit: Sören Kralemann Thorsten Kunze. Hypertext Transfer Protocol

Internet Protokolle für Multimedia - Anwendungen

Web Grundlagen zum Spidering

Literatur. [2-5] Upgrading to TLS Within HTTP/1.1 Webtechnologien SS Teil 2/HTTP

y Hypertext braucht Ressourcen-Identifikation y Unterschied zwischen Link und Identifier

Aus unserer Projekt- und Schulungserfahrung Oracle TechNet

HTTP, FTP, Telnet... diverse Kommunikations- Dienste 2 3 Internetschicht IP, ARP Ping. 3 4 Transportschicht TCP, UDP

Theoretische Aspekte

Wiederholung: Beginn

KN Das Internet

Sicheres HTTP. 8. Juni Proseminar Electronic Commerce und digitale Unterschriften

SDP ABNF (RFC4234) Session Initiation Protocol. Einleitung SDP Body. Anwendung

Techniken der Projektentwicklung

Rechnernetze I. Rechnernetze I. 11 Anwendungsprotokolle SS 2012

easylearn Webservice lsessionservice Interface für Single Sign On (SSO)

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

Rechnernetze I. Rechnernetze I. 9 Anwendungsprotokolle SS 2014

Einleitung SMTP Grundlagen HTTP 1.1 Session Management in HTTP HTTP HTTP 0.9

Java - Webapplikationen

HTTP. Hypertext Transfer Protocol. 4. Februar 2004

Lösungen zu Informations- und Telekommunikationstechnik Arbeitsheft, 3. Auflage

Makologa Touré Damian Gawenda

Evaluierung der Layer-7-Inspection Möglichkeiten von IPtables. Christoph Singer 22. Oktober 2007

REST Grundlagen. Seminar Aktuelle Software-Engineering-Praktiken für das World Wide Web. Olga Liskin

Android VPN. Am Beispiel eines Netzwerktunnels für das Domain Name System (DNS) 1 Andiodine - Android DNS-VPN

Grundlagen der CGI-Programmierung

Inhaltsverzeichnis. Open-Xchange Authentication & Sessionhandling

0.1 XForms: XML Submission

Programmers Manual Geodaten Ver. 2.0

HTTP Squid Debugging-Hilfen Praxis. Der Webproxy Squid. Ein Überblick und ein wenig (viel) HTTP. Dirk Geschke. Linux User Group Erding

Schiller-Gymnasium Hof

Client/Server-Systeme

2 Grundlagen von Webanwendungen

Rechnernetze I SS Universität Siegen rolanda.dwismuellera@duni-siegena.de Tel.: 0271/ , Büro: H-B Stand: 9.

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

1. Das World Wide Web 1.3 Das Hypertext Transfer Protocol. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit

CN.as COM - SIP Spezifikationen Notruf

PHP-Schwachstellen und deren Ausnutzung

O'REILLY 8 Beijing Cambridge Farnham Köln Sebastopol Taipei Tokyo. Reguläre Ausdrücke Kochbuch. Jan Goyvaerts & Steven Levithan

Verteilte Systeme: Übung 4

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Webtechnologien Teil 2: Hypertext Transfer Protokoll (Wiederholung aus Rechnernetze)

3. Anwedungsprotokolle

Proseminar: Website-Management-Systeme

Protokolle. Konrad Rosenbaum, 2006/7 protected under the GNU GPL & FDL

Web-Engineering. 1 / Einführung

SMS-API. Sloono Schnittstellenbeschreibung. Version 1.2 Stand

PC-Kaufmann Supportinformation - Proxy Konfiguration für Elster

Rechnernetze I SS Universität Siegen rolanda.dwismuellera@duni-siegena.de Tel.: 0271/ , Büro: H-B Stand: 23.

Mobilkommunikation. REST-basierte Dienste für verteilte, mobile Anwendungen. A. Gillert, A. Grebe, M. Hüffmeyer, C. Vogt

2. Interaktive Web Seiten. action in Formularen. Formular. Superglobale Variablen $ POST, $ GET und $ REQUEST. GET und POST

Informatik B. Vorlesung 16 Netzwerkprogrammierung. Dr. Ralf Kunze

Grundzüge Wirtschaftsinformatik KE 1 Ausgabe Seite 28 von 178

KAPITEL 7: ANWENDUNGSSYSTEME

Man liest sich: POP3/IMAP

Homepageerstellung mit WordPress

Organisationen des Internets

DV-Praktikum. Probleme mit der Hausaufgabe?

Entwurf zum Web-Service Rechnung

POP3-Protokoll Eine kurze Erklärung. Johannes Mayer SAI, Universität Ulm Juni 2001

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs

Erweiterung der Autokonfigurationsmethode für Rich Communications Suite enhanced (RCS-e) durch die COCUS AG

Vordefinierte Elemente (CI)

HIN Client API. Technische Schnittstelle. Version: 1.0 Datum: Status: Final

. Nachrichtenübertragung. Internetkommunikation Christof Fox. Wie werden Nachrichten Übertragen?

VMware vrealize Log Insight- Entwicklerhandbuch

TimeMachine. Time CGI. Version 1.5. Stand Dokument: time.odt. Berger EDV Service Tulbeckstr München

Client Server -Anwendungen mit UML und Java

Informatik der digitalen Medien

Web-Konzepte für das Internet der Dinge Ein Überblick

1Im Gegensatz zu den übrigen Web-IO Digital, ist bei den

Grundlagen der WWW- und Dokumenten-Architektur. Robert Strzebkowski TFH Berlin

Beispiel einer Anwendung: HTTP

IPv6. Autor Valentin Lätt Datum Thema IPv6 Version V 1.0

Netzwerkprogrammierung

SIP - Session Initiation Protocol

Modul 7 Uniform Resource Identifier (URI)

Hypertext Transfer Protocol (Secure)

, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2006w-MMK-D-VoD.fm, ]

Lösungen zu Informations- und Telekommunikationstechnik - Arbeitsheft

Web APIs auf dem Prüfstand Volle Kontrolle oder fertig mit den Azure Mobile Services?

Installationsanleitung zur Extension bluegate DirectURL

Rechnernetze. 6. Übung

Python CGI-Skripte erstellen

Betriebskonzept Einrichtung

Benutzer-Handbuch. HTTP-Zugang HTTPS-Zugang

Implementierung einer WebDAV-Schnittstelle für die Integration in die. forcont factory FX Software

Internetprotokoll TCP / IP

Transkript:

Das Hypertext Transfer Protokoll HTTP/1.1 Michael Dienert 18. Januar 2009 Inhaltsverzeichnis 1 RFC 2616 und RFC 2396 und die Syntaxbeschreibungssprache BNF 1 1.1 Request For Comments......................... 1 1.2 Die Backus-Naur-Form......................... 2 2 Ein Beispiel: Das Anfordern einer html-seite mit der GET-Methode 3 3 Die Antwort des Servers auf die Anfrage 4 1 RFC 2616 und RFC 2396 und die Syntaxbeschreibungssprache BNF 1.1 Request For Comments Dieser Text basiert auf dem Dokument RFC 2616, in dem das Hypertext Transfer Protokoll (HTTP) in der Version 1.1 (HTTP/1.1) definiert ist und dem Dokument RFC 2396, welches beschreibt, wie Uniform Resource Identifiers (URI) aufgebaut sind. RFC steht für Request For Comment, was soviel wie Aufforderung zur Kommentierung heisst. Die RFCs sind technische Veröffentlichungen, mit denen das Internet standardisiert und dokumentiert wurde und wird. Wie eine RFC gestaltet werden soll, steht selbst wieder in einer RFC: RFC 2223. Die Themen, die in RFCs behandelt werden, müssen in Zusammenhang mit dem Internet stehen. Bevor ein Dokument als RFC veröffentlicht wird, muss es als Vorschlag an die RFC- Redaktion (RFC-Editor, eine Gruppe der Internet Society, zu Anfang Jon Postel himself) eingereicht werden. Die meisten dieser Vorschläge stammen dabei von der IETF (Internet Engineering Task Force) und werden Internet-Draft (Draft = Entwurf) genannt. Aber auch Privatpersonen können Vorschläge für eine RFC bei der RFC-Redaktion einreichen. Wie das geht, steht in RFC 4846. Ein Vorschlag wird also zunächst als Internet-Draft veröffentlicht. Er wird dann von der Internet-Gemeinde geprüft und kommentiert. Hat man ausreichend positive Kommentare und Überarbeitungen gesammelt, kann man einen Antrag auf Veröffentlichung als RFC beim RFC-Editor stellen. 1

Eine einmal veröffentlichte RFC ist fest und kann nicht mehr geändert werden. Man kann sie bestenfalls durch eine neue RFC ablösen. Manche RFC schaffen es zum Internet Standard (STD) zu werden. Ihren Namen RFC behalten sie dennoch. Hier eine Übersicht der möglichen RFC-Kategorien (Quelle RFC 2026): Kategorien im Non-Standards-Track Hier stehen RFCs, die gar nicht zum Standard werden sollen (z.b. Aprilscherze), oder noch nicht ausgereift genug sind. Informational - zur allgemeinen Information der Internet-Gemeinde. Beispiel: RFC 2468, I remember IANA, ein Nachruf von Vincent Cerf auf Jon Postel (IANA = Internet Assigned Numbers Authority) Experimental - hiermit kann eine Entwicklungs- oder Forschungsarbeit beschrieben und somit einem grösseren Kreis von Leuten zugänglich gemacht werden. Historic - wird nicht mehr benutzt Kategorien im Standards-Track Alles was mal Standard werden möchte, muss die folgenden Stadien durchlaufen: Proposed Standard - erster Vorschlag für einen Standard; es muss noch keine Implementierung geben Draft Standard - es gibt mindestens zwei unabhängige Implementierungen der RFC Internet Standard - allgemein anerkannter Standard. Die RFC 2616 (HTTP 1.1) ist so ein Standard 1.2 Die Backus-Naur-Form Zur exakten Beschreibung von HTTP/1.1 wird in beiden RFCs die erweiterte Backus- Naur Form verwendet. Die Backus-Naur Form (BNF) ist eine Syntaxbeschreibungssprache, die aus ein paar wenigen, einfachen Regeln besteht. Hier die wichtigsten BNF-Regeln, mit dem man bereits das HTTP und die URIs exakt definieren kann: "literal": Alles was zwischen Gänsefüsschen steht, wird als reiner Text ins Protokoll eingefügt. D.h. der Text wird so wie er ist zwischen Client und Server übertragen. absoluteuri absolutepath: Das Zeichen trennt Alternativen. Dabei ist entweder die eine oder die andere Alternative erlaubt, beide zusammen nicht. ( generalheader CRLF ): Runde Klammern fassen die Elemente, die zwischen ihnen stehen zu einer Einheit zusammen. Die Klammern dienen nur dazu, diese Gruppierung zu beschreiben. Sie werden nicht ins Protokoll eingefügt. *( generalheader CRLF ): Der Stern * bewirkt, daß das nachfolgende Element beliebig oft wiederholt werden darf. Dabei ist auch die Null als Faktor erlaubt. 2

[ messagebody ]: Was zwischen eckigen Klammern ] steht ist optional, d.h. es kann, muss aber nicht im Protokolltext auftauchen. CR: Carriage Return, ASCII-Zeichencode 13. LF: Line Feed (Zeilenvorschub), ASCII-Zeichencode 10. SP: Space (Leerzeichen), ASCII-Zeichencode 32. 2 Ein Beispiel: Das Anfordern einer html-seite mit der GET-Methode Mit der GET-Methode fordert der Client (sprich der html-browser) eine html-seite vom Server an. Wie der dazu notwendige Protokolltext aussieht, soll mit der BNF beschrieben werden. Das Anfordern einer Seite ist ein sogenannter html-request. Dieser ist in der RFC 2616 definiert. Die für einen Request benötigten URIs legt die RFC 2396 fest. Im Folgenden stehen die für einen Request benötigten Definitionen. Um das Ganze nicht unübersichtlicher werden zu lassen als es ohnehin schon ist, wurden ein paar Optionen weggelassen und die Schreibweise etwas geändert: Request = RequestLine *( (generalheader requestheader entityheader) CRLF ) CRLF [messagebody] RequestLine = Method SP RequestURI SP httpversion CRLF Method = "GET" "POST" "PUT"... RequestURI = "*" absoluteuri absolutepath authority absoluteuri = scheme ":" (netpath absolutepath) ["?" query] netpath = "//"authority[absolutepath] authority = host [":"port] host = hostname IPV4adress requestheader = Accept... Host... UserAgent Host = "Host" ":" host [ ":"port ] Abbildung 1: Die BNF zur Definition von http-requests Mit diesen Deklarationen liesse sich eine Unmenge von Requests formulieren. Wir wollen aus dieser Menge aber nur diejenigen ansehen, mit denen ein http-client (Browser) mit der GET-Methode eine html-seite von einem Server anfordert. Und hierfür gibt es wiederum zwei Möglichkeiten. 1. Eine Anfrage mit einer absoluten URI (absoluteuri). Eine absolute URI erkennt man daran, daß sie mit einem scheme (vgl. Abb. 1) beginnt. Die bekanntesten schemes sind http: und ftp:. Eine komplette http-anfrage sieht dann zum Beispiel so aus: GET http://localhost:8080/micha/hallouser.jsp HTTP/1.1 CRLF CRLF Dabei sind also: 3

method = GET scheme = http hostname = localhost port = 8080 absolutepath = /micha/hallouser.jsp httpversion = HTTP/1.1 Diese Form einer GET-Anfrage ist zwingend notwendig, wenn der Browser die Anfrage zunächst an einen Proxy sendet. Bei zukünftigen http-versionen sollen Requests nur mit absoluten URIs möglich sein. Um also später den übergang zu absoluten URIs zu vereinfachen, müssen bereits jetzt HTTP/1.1-Server die absoluteuri-form akzeptieren. 2. Die zweite, zur Zeit bekanntere Möglichkeit ist eine Anfrage, bei der als requesturi ein absoluter Pfad auf einem Rechner angegeben wird. Die Netzadresse des Rechners wird dann im requestheader festgelegt: GET /micha/hallouser.jsp HTTP/1.1 CRLF Host: localhost:8080 CRLF Hier sind also: requestheader = Host Host = Host: localhost:8080 3 Die Antwort des Servers auf die Anfrage Schickt man eine der beiden Requests an den entsprechenden http-server, erhält man z.b. folgende Antwort (Response): HTTP/1.1 200 OK Set-Cookie: JSESSIONID=24C9704B2EF60B1F4E17784503364523; Path=/micha Content-Type: text/html;charset=iso-8859-1 Content-Length: 545 Date: Mon, 15 Sep 2003 20:02:52 GMT Server: Apache Coyote/1.0 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>erster Test mit Parametern</title> </head> <body> <h3> Bitte einen Parameter mit der Hand am Arm an das URI anhaengen </h3> <p> Beispiel: http://localhost:8080/micha/hallouser.jsp?name=micha </p> Hallo, salute null! <hr> <address><a href="mailto:dienert@wara.de">michael</a></address> <!-- Created: Tue Jan 7 00:08:25 CET 2003 --> <!-- hhmts start --> Last modified: Tue Jan 7 00:10:40 CET 2003 <!-- hhmts end --> </body> </html> Die allgemeine Form einer Response sieht so aus: 4

Response = StatusLine *( (generalheader requestheader entityheader) CRLF ) CRLF [messagebody] StatusLine = HTTPVersion SP StatusCode SP ReasonPhrase CRLF Die erste Zeile der Response ist noch einfach zu identifizieren: Es ist die StatusLine, zusammengesetzt aus HTTP-Version, StatusCode und einer Klartextangabe des StatusCodes (ReasonPhrase). Hier im Beispiel hat der Status-Code den Wert 200, die Anfrage war also in Ordnung. Die Status-Codes sind dreistellig. Mit der ersten Ziffer wird eine Grobeinteilung in verschiedene Response-Arten vorgenommen: 1xx: Request erhalten, Verarbeitung ist noch im Gange 2xx: Request wurde erfolgreich empfangen, interpretiert und beantwortet 3xx: Redirect = umadressieren (Weiterleiten) der Anfrage 4xx: Fehler des Client, z.b. 400 Bad Request 5xx: Fehler des Servers, z.b. 501 Not Implemented Bei den Header-Zeilen wird es wegen der drei Optionen und dem *-Zeichen (Wiederholungszeichen) mit der Zuordnung schon schwieriger, weshalb hier nur kurz die Zeilen des Beispiels erklärt werden. Content-Type: Dieser Header legt fest, um was es sich bei dem messagebody handelt. Ist es Text oder Daten eines Bildes etc. Diese Information ist für den Client = Browser wichtig, um den Inhalt des messagebody korrekt darstellen zu können. Ein Server sollte immer den Content-Type angeben, das ist aber nicht zwingend vorgeschrieben. Content-Length: Gibt die Länge des messagebody in Bytes an. Der Server sollte die Content-Length angeben. Content-Encoding: Das kommt hier im Beispiel nicht vor, soll aber kurz erläutert werden: Mit dem Content-Encoding kann man angeben, dass der message- Body z.b. mit gzip (GNU-Zip) komprimiert wurde. Date: Datum und Uhrzeit des Servers beim Absenden der Antwort. Der Date-Header muss in einem Format wie in RFC 1123 beschrieben, gesendet werden. Server: Dieser Header enthält Informationen über die Server-Software. Ein Proxy darf dieses Feld nicht verändern, sondern kann einen Via:-Header hinzufügen. 5