<description> * HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 14 Expires: Thu, 01 Dec 2003 …
• Stavové kódy – – – – –
100 200 301 401 500
Hello, world!
Continue OK, 204 No content Moved permanently Unauthorized, 403 Forbidden, 404 Not found Internal error, 501 Not implemented 7
Odpověď (2) • Záhlaví – server – Server – WWW-Authenticate – Location
• Záhlaví – tělo – Content-Type (default: application/octet-stream) – Content-Length – Content-Encoding » tělo = encoding( type( data[length] ))
– Last-modified, Expires – Pragma
8
Příklady HTTP komunikace HTTP 0.9 GET $ telnet 80 teddy GET / Document Root This is the Document Root
This page is the root document of this server.
Connection to host lost. $
9
Příklady HTTP komunikace (2) HTTP 1.0 GET
[RFC2616] „… odesilatel uvádí formát zprávy a své schopnosti ohledně HTTP komunikace, spíše než charakteristické rysy této komunikace.“
GET / HTTP/1.0 HTTP/1.1 200 OK Server: Apache/1.3.27 (Win32) PHP/4.2.3 Last-Modified: Thu, 28 Nov 2002 10:55:36 GMT Content-Length: 163 Connection: close Content-Type: text/html Document Root This is the Document Root
10
Příklady HTTP komunikace (3) HTTP 1.1 GET s trvalým připojením GET / HTTP/1.1 Host: teddy Connection: keepalive
HTTP/1.1 200 OK Server: Apache/1.3.27 (Win32) PHP/4.2.3 Last-Modified: Thu, 28 Nov 2002 10:55:36 GMT Content-Length: 163 Content-Type: text/html
Document Root ... (pokračuje)
GET /misc/ HTTP/1.1 Host: teddy Connection: close HTTP/1.1 200 OK Server: Apache/1.3.27 (Win32) PHP/4.2.3 Last-Modified: Thu, 28 Nov 2002 11:05:11 GMT Content-Length: 102 Connection: close Content-Type: text/html /misc/ ... Connection to host lost. 11
Příklady HTTP komunikace (4) GET /misc/ HTTP/1.1 Host: teddy Connection: close HTTP/1.1 200 OK Server: Apache/1.3.27 (Win32) PHP/4.2.3 Last-Modified: Thu, 28 Nov 2002 11:05:11 GMT Content-Length: 102 Connection: close Content-Type: text/html /misc/ ...
12
Příklady HTTP komunikace (5) MIME typ pro data v těle požadavku
POST /list/test.php HTTP/1.1 Host: teddy Content-Type: application/x-www-form-urlencoded Content-Length: 10 test=asdf HTTP/1.1 200 OK Date: Thu, 28 Nov 2002 11:50:30 GMT Server: Apache/1.3.27 (Win32) PHP/4.2.3 X-Powered-By: PHP/4.2.3 Transfer-Encoding: chunked Content-Type: text/html 37 Echo promenne
test = asdf
Echo promenne
test = ".$_POST["test"]; ?> 13
Příklady HTTP komunikace (6) HTTP 1.0, 1.1 HEAD HEAD /misc/index.html HTTP/1.1 Host: teddy HTTP/1.1 200 OK Date: Thu, 28 Nov 2002 11:36:18 GMT Server: Apache/1.3.27 (Win32) PHP/4.2.3 Last-Modified: Thu, 28 Nov 2002 11:10:58 GMT ETag: "0-6f-3de5f9c2" Accept-Ranges: bytes Content-Length: 111 Content-Type: text/html Connection to host lost. 14
Příklady HTTP komunikace (7) HTTP 1.1 OPTIONS OPTIONS / HTTP/1.1 Host: teddy HTTP/1.1 200 OK Content-Length: 0 Allow: GET, HEAD, OPTIONS, TRACE OPTIONS /list/test.php HTTP/1.1 Host: teddy
HTTP/1.1 200 OK Content-Length: 0 Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACE 15
Příklady HTTP chyb GET /misc/old.html HTTP/1.1 Host: teddy HTTP/1.1 301 Moved Permanently Date: Thu, 28 Nov 2002 13:01:59 GMT Server: Apache/1.3.27 (Win32) PHP/4.2.3 Location: http://www.egu.org/new.html Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1 GET /foo HTTP/1.0
GET /foo Not Found
HTTP/1.1 404 Not Found Date: Thu, 28 Nov 2002 12:07:27 GMT Server: Apache/1.3.27 (Win32) PHP/4.2.3 Connection: close Content-Type: text/html; charset=iso-8859-1 Not Found 16
Příklady HTTP chyb (2) OPTION / HTTP/1.1 Host: teddy HTTP/1.1 501 Method Not Implemented Date: Thu, 28 Nov 2002 12:14:20 GMT Allow: GET, HEAD, OPTIONS, TRACE Connection: close Content-Type: text/html; charset=iso-8859-1 HEAD /phpmyadmin/ HTTP/1.1 Host: teddy HTTP/1.1 401 Unauthorized Date: Thu, 03 Nov 2005 10:04:11 GMT WWW-Authenticate: Basic realm="phpMyAdmin" status: 401 Unauthorized Content-Type: text/html; charset=iso-8859-1
17
HTTP autentikace • Účel: přístup ke chráněnému obsahu – chráněné oblasti (realm)
• Mechanizmus výzva-odpověď – – – –
GET 401 Not authorized; WWW-Autenticate GET , Authorization 200 OK / 403 zákaz 18
HTTP autentikace (2) • Základní autentikace (basic) » heslo v plaintext podobě
– WWW-Authenticate: Basic realm=“jméno“ – Authorization: Basic base64(login:passwd)
• Digest autentikace » heslo v MD5 hash podobě
– WWW-Authenticate: Digest realm=“jméno“ Domain=“URI URI“ nonce= opaque=<string> stale=True/False algorithm=MD5|token – Authorize: Digest username=“name“ nonce=… opaque=… request-digest= » záleží na algoritmu, nonce, těle zprávy, atd. 19
Cookies • Způsob uchování informací na klientu – uvedeny v Netscape Navigator 2(?) » cca 1996
– jednoduché rozšíření HTTP
• Hlavní použití – správa relací – sledování uživatelů – personalizace stránek
http://wp.netscape.com/newsref/std/cookie_spec.html
20
Nastavení cookie v HTTP • Hlavička odpovědi
Set-Cookie: name=value [;EXPIRES=dateValue] [;DOMAIN=domainName] [;PATH=pathName][;SECURE]
• Expires: DoW, DD-Mon-YY HH:MM:SS GMT – standardně: aktuální relace (běh prohlížeče)
• Domain: jména DNS, pro které je cookie platné – standardně: zdrojový server
• Path: podprostor URI, pro kterou je cookie platné – standardně: původní stránka
• Secure: poslat cookie pouze přes bezpečný kanál – standardně: zabezpečení nenastaveno 21
Posílání cookie z klienta Hlavička požadavku Cookie: name1=value1; name2=value2 ...
•
Klient posílá všechna cookie, která … – jsou určena pro doménu požadovaného serveru – mají cestu, která souhlasí s URI požadavku (konkrétnější před obecnějším) – maximální velikost všech cookie 4 KB »
•
limit HTTP hlavičky
Mazání cookie – pošle se prázdá hodnota – pošle se již prošlá doba vypršení
Uskladnění cookie dat • Netscape, Mozilla: jeden soubor, 300 cookies max (fixed ve verzi 1.7) • MSIE: cookie pro každou doménu ve zvláštním souboru
22
Příklad cookies – výsledek
23
Zabezpečení přenosu • MIME, BASE64 – nikoli • Nativní šifrování – není dostupné
• Protokoly nižší úrovně – SSL (Secure Sockets Layer) HTTPS port 443 – TLS (Transport Layer Security) » vývoj z SSL 3.0
– asymetrická šifra pro přenos klíče – symetrická šifra pro komunikaci
24
WebDAV (přehled) • Web Document Authoring and Versioning – rozšíření HTTP/1.1 (RFC 2518, 2/1999) • nové metody • XML data v požadavku a odpovědi • multi-status odpovědi
– mění WWW v zapisovatelné médium – http://www.webdav.org/
• Základní pojmy – – – –
zdroj (resource), kolekce (URIs) vlastnost (property) – živá, neživá (dead) zámek (sdílený/výhradní, write-lock) hloubka operací
25
Mechanismy WebDAV • Přidané metody – LOCK, UNLOCK (třída 2) – PROPFIND, PROPPATCH (třída 1) – MKCOL, [PUT]; COPY, MOVE, DELETE
• Vlastnosti (XML) – datum vytvoření, zdroj, …
• Hlavičky nových požadavků/odpovědí: – Depth: [0|1|nekonečno] – Destination: URI – Lock-Token: coded-URL
• Přidané status kódy (výběr): – 207 Multi-Status – 423 Locked, 424 Failed Dependency
26
Web servery
Co je web server • Software hardware – démon/služba na serverovém OS
• Účel – implementace HTTP (odpovědi) – přidané služby
• Historie – CERN daemon 1990-1996 NCSA 1993-1995 (R. McCool, M. Andreesen) Apache („A PAtCHy sErver“) 1995 – komerční nezávislé implementace (Sun, Microsoft, …)
28
Služby poskytované serverem •
Jádro
• •
Statické dokumenty Provoz aplikací
– – – –
HTTP protokol, virtuální servery load balancing, throttling, clustery, … rozšiřující API administrativní rozhraní
– interpretace HTML-embedded scriptování »
SSI, PHP, ASP, JSP, …
»
ASP, JSP/Servlety
– kontejner pro webové aplikace
•
Služby
– publikování a správa dokumentů »
PUT, WebDAV, ftp, FrontPage extensions
– autentikace (HTTP, databáze, LDAP, …)
29
Apache
•
"The most widely used server in the known Universe" – (1995: 658=3.5%, 1998: 828K=15%, 2003: 31M=67%, 2009: 31M=50%)
•
Cíl projektu: “creating a robust, commercial-grade, … freely available reference implementation of HTTP” • Apache license, volunteers, meritocracy
•
vlastnosti – HTTP/1.1, CGI, SSI, dynamic load balancing, otevřené API – Moduly – přizpůsobení potřebám, rozšíření; podpora DSO/DLL – Virtual hosts, proxy, content negotiation, …
http://www.netcraft.com/survey/
www.serverwatch.com
30