il protocollo http - link.it · il protocollo http • È il protocollo standard tramite il quale i...
TRANSCRIPT
Tito Flagella - [email protected]
Il protocollo HTTP
2
Il protocollo HTTP
• È il protocollo standard tramite il quale i server Web rispondono alle richieste dei client (inizialmente i browser);
• È basato su un modello richiesta/risposta• Versione Attuale: HTTP/1.1 (RFC 2616)
3
Il protocollo HTTP: struttura di una richiesta
• una linea iniziale: tipo della richiesta (metodo), URI, protocol version
• Request headers (opzionali)• Una linea vuota• I dati della Richiesta (opzionale)
4
Esempio di Richiesta
GET /index.html HTTP/1.0User-agent: MozillaAccept: text/html, text/plain, image/jpeg
5
Il protocollo HTTP: principali metodi della richiesta
• GET: richiede il documento specificato nel URI• HEAD: richiede solo l’informazione header
relativa al documento• POST: richiede che il server accetti alcuni dati
dal browser, come l’input delle form html per un programma CGI
• PUT: sostituisce il contenuto di un documento del server con dati in arrivo dal client
6
Header della Richiesta
• Accept: i tipi di file che il browser può accettare• Authorization: usato se il browser vuole
autenticarsi con il server; contiene informazioni credenziali, come username e password.
• User-agent: il nome e la versione del browser• Referer: la URL del documento che conteneva il
link seguito dall’utente.• Host: l’indirizzo IP e la porta della risorsa
richiesta
7
Dati della Richiesta
• In caso di POST o PUT, il cliente invierà i dati dopo gli header, seguiti da una linea vuota
• In caso di GET or HEAD non ci sono dati da spedire
8
Risposta del Server
• La risposta include:– versione del protocollo HTTP, codice di stato e
reason phrase– Header della Risposta– Dati della Risposta
9
Esempio di Risposta HTTP
HTTP/1.0 200 OKServer: Netscape Enterprise Server/3.0Content-type: text/htmlContent-length: 76
<HTML><HEAD><TITLE>Hello World</Title></HEAD><BODY>Hello World</BODY></HTML>
10
Codice di Stato
• Si tratta di un codice di tre cifre• Sono classificati in 4 categorie:
– 200-299 successo– 300-399 ridirezione– 400-499 errore sul lato client– 500-599 errore sul lato server
11
Esempi di Stato HTTP
• 200: OK; operazione completata con successo• 302: ridirezione a una nuova URL; la URL
originale è stata spostata; non si tratta di un errore, gli agent compatibili cercheranno la nuova pagina
• 304: usa una copia locale; gli agent compatibili mandano una informazione su "last-modified" della copia della pagina in cache. Il server può rispondere con il codice 304 invece di mandare di nuovo la pagina
12
Esempi di Stato HTTP (2)
• 401: non autorizzato. L’utente ha richiesto un documento ma non ha fornito uno username o una password validi
• 403: Vietato, l’accesso alla URL non è consentito• 404: Non trovato; il documento non è disponibile
sul server• 500: Server error; si è verificato un errore interno
del server
13
Header della Risposta
• Contiene informazioni circa il server e i dati della risposta
• Gli header più comuni sono:– Server: nome e versione del server web– Date: la data corrente (Greenwich Mean Time)– Last-modified: la data di ultima modifica del documento
richiesto– Expires: la data di scadenza del documento– Content-length: dimensione in byte dei dati che seguono– Content-type: il tipo MIME dei dati che seguono– WWW-authenticate: usato durante l’autenticazione, include
informazioni necessarie per l’accesso
14
Dati relativi alla Risposta
• Il server manda una linea vuota dopo gli header
• Tutto ciò che segue costituisce i dati relativi alla risposta
• Può trattarsi di un file html, o di qualunque altro tipo di file, anche dati binari
HTTP GET con Telnet
telnet proxy 8080Trying 10.114.87.2...Connected to proxy.Escape character is '^]'.GET http://www.google.it/index.html HTTP/1.1
HTTP/1.0 200 OKCache-Control: privateContent-Type: text/html; charset=ISO-8859-1Set-Cookie: PREF=ID=c0b [....] domain=.google.itDate: Mon, 18 Feb 2008 16:07:53 GMTProxy-Connection: close
<html>[...]
HTTP GET con curl
curl --proxy proxy:8080 -v http://www.google.it/search?q=ciao*** REQUEST ***GET http://www.google.it/search?q=ciao HTTP/1.1User-Agent: curl/7.16.4 (i386-redhat-linux-gnu) libcurl/7.16.4
OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.8Host: www.google.itPragma: no-cacheAccept: */*Proxy-Connection: Keep-Alive *** RESPONSE ***HTTP/1.0 403 ForbiddenContent-Type: text/htmlContent-Length: 4362Date: Mon, 18 Feb 2008 16:14:34 GMTHTTP/1.0 proxy connection set to keep alive!Proxy-Connection: keep-alive
<html>[...]
17
• Il server distingue una risorsa statica da un’applicazione in due possibili modi:– estensione (es: .cgi)
• un programma cgi puo’ essere messo ovunque nel document’s tree del server
– nella url e’ indicata una directory registrata per contenere cgi, esempio:
• http://web.server.com/cgi-bin/feedback
• Si tratta di meccanismi attivabili/configurabili sul Server Web
URL Applicative
18
• Una URL Applicativa è tipicamente suddivisa in 2 parti:[App path URL]?[query string]
• La App path URL identifica il nome dell'applicazione da attivare
• la query string, opzionale, può contenere eventuali parametri da passare al programma
19
• Si possono compattare più parametri nella query string usando una codifica standard:– separare i parametri con &– sostituire i blank con +– Sottoporre ad escape (%xx) i caratteri speciali– esistono utility per codifica-decodifica. Es. perl
http://www.bio.cam.ac.uk/web/form.html)
Codifica dei parametri di input
20
• Statica: parametri introdotti staticamente in html:– http://host.dominio/cgi-bin/env.pl?
user=rossi&password=secret
• Dinamica: parametri gestiti dinamicamente da una form html
Predisposizione dei parametri da client
21
• Le form sono il meccanismo usato in html per l’interazione con l’utente
• Si occupano di raccogliere input dall’Utente e inviarlo opportunamente codificato al Web Server– usando il metodo get, i dati viaggiano come parte della
query string della URL, vengono passati al CGI come var. d’ambiente QUERY_STRING
– usando il metodo post, viaggiano come dati della richiesta, vengono passati al CGI come standard input
Uso delle Form in Html
22
• Le Form sono introdotte dal tag <form>• Oltre a html normale possono contenere i
seguenti tag:– <input> definisce text entry fields, checkboxes, radio
buttons o pushbuttons– <select> definisce dropdown menus e selection box– <textarea> definisce campi text-entry su più linee
• la Form può avere i seguenti attributi:– action, la URL del CGI (o altra estensione) cui inviare i
dati– method, il metodo HTTP usato per la sottomissione dei
dati (get o post)
Uso delle Form Html (2)