Il Protocollo HTTP e la programmazione di estensioni Web 1
Il protocollo HTTP È il protocollo standard inizialmente ramite il quale i server Web rispondono alle richieste dei client (prevalentemente browser); È basato su un modello richiesta/risposta Versione Attuale: HTTP/1.1 (RFC 2616) http://www.w3.org/protocols/rfc2616/rfc26 16.txt 2
Il protocollo HTTP: struttura di una una linea iniziale: tipo della richiesta (metodo), URI, protocol version Request headers (opzionali) Una linea vuota I dati della Richiesta (opzionale) richiesta 3
Esempio di Richiesta GET /index.html HTTP/1.0 User-agent: Mozilla Accept: text/html, text/plain, image/jpeg 4
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 5
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 6
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 7
Risposta del Server La risposta include: versione del protocollo HTTP, codice di stato e reason phrase Header della Risposta Dati della Risposta 8
Esempio di Risposta HTTP HTTP/1.0 200 OK Server: Netscape Enterprise Server/3.0 Content-type: text/html Content-length: 76 <HTML> <HEAD><TITLE>Hello World</Title></HEAD> <BODY>Hello World</BODY> </HTML> 9
Codice di Stato Si tratta di un codice di tre cifre Sono classificati in cinque categorie: 200-299 successo 300-399 ridirezione 400-499 errore sul lato client 500-599 errore sul lato server 10
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, i browser compatibili cercheranno la nuova pagina 304: usa una copia locale; i browser 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 11
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 è vietato 404: Non trovato; il documento non è disponibile sul server 500: Server error; si è verificato un errore interno del server 12
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 13
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 14
L HTTP (Web) Server Client side Server side Web browser 1 HTTP Web server Web browser n Files 15
Un server Web implementa HTTP sul lato server Accetta connessioni HTTP dai client, e ne riceve la richiesta Localizza le risorse specificate nella URL contenuta nell header della richiesta Accede alle risorse usando il metodo richiesto 16
Un server Web implementa HTTP - lato server (2) Costruisce un prologo di risposta HTTP contenente informazioni sullo stato Costruisce la risposta, contenente il prologo, gli header e i dati relativi alla risorsa richiesta Invia la risposta al cliente Chiude la connessione con il cliente (può usare keepalive) 17
Altrimenti i server potrebbero solo restituire il contenuto di un file Necessarie per: Estensioni Web servire l informazione dinamicamente monitorare/trasformare l informazione in transito accedere a Database 18
Classificazione delle Estensioni Web Dal punto di vista del programmatore Programming centric Html centric Dal punto di vista dello standard Standardizzazione dei meccanismi di comunicazione tra Server Web e applicazione esterna; Standardizzazione delle API di programmazione 19
Classificazione delle Estensioni Web API Standard Comunicazioni Standard Programming centric Servlet CGI Html-centric JSP 20
Common Gateway Interface Noto come CGI, storicamente il primo meccanismo per la realizzazione di estensioni Web. Il CGI è uno standard tramite cui un server Web può passare una richiesta http ad un programma esterno e ricevere come risposta i dati da restituire al cliente. 21
CGI (1) Processo Tcl Perl Codice Utente CGI Processo Web server Qualunque eseguibile HTTP Web browser client 22
CGI (2) I programmi esterni girano in processi separati Causa di problemi di performance (specialmente se bisogna supportare molte richieste simultanee) programming centric: e un programma (C, perl, ) che produce l HTML come output L accesso ai dati avviene attraverso variabili di ambiente o standard input 23
CGI (3) Vantaggi portabilità semplicità del modello Svantaggi performance Completa mancanza di stato 24
Ciclo di vita di un CGI (1) Il server invoca il programma specificato nella URL e gli passa i dati di input contenuti nel messaggio di richiesta il programma eredita informazioni di stato sul server, sul client e sulla richiesta tramite: var di ambiente argomenti da linea di comando standard input 25
Ciclo di vita di un CGI (2) il programma processa i dati di input Il programma genera un messaggio di risposta in html sullo standard output il server intercetta il messaggio di risposta e lo spedisce al cliente 26
Variabili di ambiente Sono raggruppate in 5 categorie: General information Input information Client information Server information HTTP information 27
URL Applicative 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 28
URL Applicative 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 29
Codifica dei parametri di input 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) 30
La Variabile d ambiente QUERY_STRING E` importante perché permette allàapplicazione di accedere al dato originale inviato come query string dal browser al server Web. 31
Predisposizione dei parametri da client Statica: parametri introdotti staticamente in html: http://host.dominio/cgibin/env.pl?user=rossi&password=secret Dinamica: parametri gestiti dinamicamente da una form html 32
Uso delle Form in Html 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 33
Uso delle Form Html (2) 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) 34
Esempi di passaggio dei parametri a CGI tramite form Html Vedi: http://projects.cli.di.unipi.it/isi/examples/cgi/1.html http://projects.cli.di.unipi.it/isi/examples/cgi/forms.html http://projects.cli.di.unipi.it/isi/examples/cgi/textareas.ht ml 35
Riferimenti http://hoohoo.ncsa.uiuc.edu/cgi/ 36