Lezione 1 : Web And Http
Il World Wide Web – 1
! Una possibile soluzione alla proliferazione di differenti protocolli utilizzati su Internet
! Origini
– Tim Berners-Lee propose il WEB al CERN (Conseil Européen pour la Recherche Nucléaire - Consiglio Europeo per la Ricerca Nucleare) nel 1989
! Sito Web
– Insieme coordinato di pagine, relative ad uno stesso tema, che risiedono tipicamente su uno stesso server HTTP
!Il Web è l’insieme di siti web interconnessi con hyperlink
Il World Wide Web – 2
! Scopo del WWW secondo T.B.L.
– Permettere a studiosi di avere accesso a molti database di lavori scientifici attraverso i propri computer. Studiosi da tutto il mondo potrebbero ricercare e recuperare documenti su un qualsiasi numero di server.
! Le basi furono gettate su un computer NeXT, implementazione alla fine del 1990, nel 1991 il sistema fu portato su altre piattaforme e reso disponibile a tutti
Cosa è il W3C (http://www.w3.org)
! Il World Wide Web Consortium (W3C) è un consorzio di aziende e centri di ricerca che si occupa dello sviluppo e della standardizzazione del Web
! Mission
– Condurre il World Wide Web al suo pieno potenziale sviluppando protocolli e linee guida per assicurare la crescita a lungo termine del Web
WEB browser
! Mosaic
– Sviluppato da NCSA (National SuperComputing Applications presso l’Università dell’Illinois)
– Il primo ad utilizzare una GUI, ha portato all’esplosione dell’uso del WEB
– All’inizio funzionava solo per X-Windows sotto Unix, alla fine del 1993 fu portato sotto altre piattaforme
! Oggi:
– Firefox, Netscape, IE, Opera, Safari, Mozilla,
Amaya, ..
WEB server
! Un Server Web è un programma che fornisce documenti ai browser che ne fanno richiesta.
! I documenti possono essere statici o dinamici. I documenti dinamici sono costruiti da programmi che sono “memorizzati” sul server.
!Ad esempio, un browser invia al server un modulo compilato e richiede ad un programma, che risiede “dal lato del server” (server-side), di elaborare i dati specificati nel modulo
Apache
http://httpd.apache.org
Gratuito, distribuito con Linux
Disponibile anche sotto Mac OS X, Windows,
Unix, ...
Usato dal 70% dei server
! ISS (Internet Information Server) • http://www.microsoft.com
• A pagamento, Microsoft • Usato dal 21% dei server
... altri WEB server
! Netscape-Enterprise
! IBM HTTP SERVER
! SunOne – Sun Java System ! Jigsaw
– reference server di W3C
! Nel febbraio del 1995, il più popolare “web server” era il daemon per HTTP (httpd), di pubblico dominio, sviluppato da Rob McCool presso il National Center for Supercomputing Applications (NCSA) dell’University of Illinois
! Lo sviluppo di questo daemon era in stallo da metà del 1994 perché McCool aveva lasciato NCSA.
Molti webmaster avevano sviluppato le proprie estensioni e corretto vari bug
! Un piccolo gruppo di questi webmaster iniziarono a collaborare per coordinare i loro cambiamenti al server (sotto forma di pach)
!Alla fine del febbraio 1995, otto di tali webmaster gettarono le basi dell’Apache Group originario.
– http://httpd.apache.org/ABOUT_APACHE.html
Caratteristiche di Apache
! Apache: A PAtCHy sErver ! Stabilità ed affidabilità
– Processo di sviluppo open source (disponibilità del codice sorgente)
! Portabilità
– Supporto dei SO Linux, Unix, Microsoft
Windows, OS/2, Solaris
! Efficienza, flessibilità
! Supporto dei più recenti protocolli
– compatibilità con HTTP/1.1
URL (Uniform Resource Locator )
!Per poter individuare ed accedere a risorse sul WEB è necessario un meccanismo per poterle identificare (tramite un nome) e localizzare (tramite un indirizzo)
!Una URL indica la collocazione reale di una risorsa accessibile mediante uno dei protocolli (HTTP) attualmente in uso su Internet
Sintassi di una URL – 1
SCHEMA:// [username:password@]identificatore.host[:NumeroPorta]/[path]
! Le parti di colore rosso sono opzionali ! Una URL è divisa in tre parti
– identificatore dello schema di indirizzamento, seguito dal simbolo ':// '
• http://
–identificatore dell'host sul quale risiede la risorsa, espresso mediante un nome di dominio o un indirizzo IP
• carprera.dia.unisa.it
Sintassi di una URL – 2
SCHEMA:// [username:password@]identificatore.host[:NumeroPorta]/[path]
! Terza parte di una URL
–stringa di identificazione della risorsa sul server (path) preceduta dal simbolo '/';
la sua interpretazione dipende dallo schema di denominazione;
il simbolo '/' viene utilizzato per denotare una struttura gerarchica, con la parte a sinistra indicante il livello superiore
• /TSW/index.shtml
Tipi di schemi di indirizzamento
! http per il protocollo HTTP
! ftp: per il File Transfer Protocol
! gopher: per il Gopher protocol
! mailto: per gli indirizzi di posta elettronica
! news: per i messaggi dei newsgroup NNTP
! wais: per i server WAIS
! file: per l'accesso a file locali
! telnet, rlogin, tn3270: per riferirsi a sessioni interattive in modalità terminale
HTTP
Hypertext Transfer Protocol
HTTP
! “Protocollo di livello applicativo per sistemi di informazione distribuiti, collaborativi ed ipermediali”
– Esso viene utilizzato dal web server e dal client (user agent) per comunicare
– Si colloca al di sopra di TCP/IP
–Permette di costruire sistemi di accesso all’informazione indipendenti dal tipo dell’informazione stessa
Apertura della connessione
! Il browser (user agent) analizza l’URL e ne estrae il dominio
! Il browser consulta il DNS per ottenere l’indirizzo IP corrispondente al dominio
! Il browser apre una connessione TCP con il web server (usa la porta 80)
! I messaggi HTTP sono di 2 tipi: – request / response
!Una volta stabilita la connessione, il browser richiede una risorsa al web server (request) e il server risponde inviando o la risorsa richiesta oppure un messaggio di errore (response)
Caratteristiche di HTTP
! HTTP è esistito in tre versioni: – 0.9
– 1.0 (RFC 1945)
– 1.1 (RFC 2616)
!La differenza principale tra HTTP 1.0 e 1.1 è stata la possibilità di specificare coppie multiple di richiesta e risposta nella stessa connessione
Ulteriori caratteristiche di HTTP
! HTTP è “stateless”
– Il server non mantiene alcuna informazione
sulle richieste passate del client
– I protocolli che conservano lo “stato” sono molto complessi
• La storia passata (stato) deve essere mantenuta
–Se il server od il client interrompe la connessione, allora la visione degli stati di server e client possono essere
inconsistenti e deve essere riconciliata
Messaggi HTTP
! Il protocollo definisce il formato dei messaggi
! request e response hanno lo stesso formato e seguono la struttura di un messaggio di email (RFC 822):
start-line
• può essere o una request-line o una status-line
HEADER (contiene informazioni corpo del messaggio)
• Content-length
• Content-type
<Linea Vuota>
BODY (può mancare)
Metodi HTTP
! Un metodo HTTP può essere
– Sicuro: non genera cambiamenti allo stato di una risorsa
– Idempotente: l’effetto sul server di più richieste identiche è lo stesso di quello di una sola richiesta
! Analizzeremo solo:
– GET (Richiesta di dati)
– HEAD (Richiesta al server di header
HTTP contenenti informazioni)
– POST (Invio di dati all’URL indicato)
– PUT (Colloca i dati contenuti nel BODY all’URL indicato)
Il metodo GET
! È il metodo più utilizzato, si attiva quando
– Si segue un link
– Si scrive un URL nell’apposito campo del browser
! GET è sicuro ed idempotente, e può essere:
– assoluto (utilizzo di default, la risorsa viene richiesta senza specificare altro)
– condizionale (se la risorsa corrisponde ad un criterio indicato negli header If-match, If-range If-modified-since, etc.)
– parziale (se la risorsa richiesta è una sottoparte di una risorsa memorizzata sul server).
Il metodo HEAD
! Simile al GET, ma non viene restituita una
risorsa
! Si usa per ottenere informazioni sulla risorsa
! HEAD è sicuro ed idempotente, e viene usato per verificare:
– la validità di un URI: la risorsa esiste e non è di lunghezza zero,
– l’accessibilità di un URI: per accedere alla risorsa presso il server non sono richieste procedure di autenticazione
– la coerenza di cache di un URI: la risorsa non è stata modificata nel frattempo, non ha cambiato lunghezza, valore hash o data di modifica
GET ed HEAD
! GET e HEAD devono essere implementati dal server
! Gli altri metodi sono facoltativi
Il metodo POST – 1
! POST, pur essendo una request,
contiene un message body
!POST serve per inviare una risorsa a
un URL senza crearne una nuova ! POST non è sicuro né idempotente ! Ad esempio, si utilizza per:
–Inviare un messaggio a un indirizzo di posta elettronica
– Inviare il contenuto di un modulo ad un programma che risiede sul server
Il metodo POST – 2
! Non effettua necessariamente una
lettura di informazioni dal server
!Il server, in risposta ad una POST, può
Ancora su GET e POST
! Anche GET può essere utilizzato per inviare dati al server o per modificare/creare nuove risorse
– La risorsa invocata con GET è un programma che • modifica se stesso
• estrae dati da una form HTML e crea un nuovo file HTML
che li contiene
– Dato che ciò non era intenzionale da parte
dell’utente, allora GET è considerato sicuro
! POST invia i dati nel corpo del messaggio di
richiesta
! GET invia i dati come parte dell’URL
Cosa riceve il server con POST
POST /cgi-bin/registra.cgi HTTP/1.1
Host: caprera.dia.unisa.it:12345 [. . .]
Connection: keep-alive
Referer: http://caprera.dia.unisa.it/LASD/prenota.html
Content-Type: multipart/form-data; boundary= ---------------------------41184676334 Content-Length: 438
-----------------------------41184676334
Content-Disposition: form-data; name="nome" carlo
-----------------------------41184676334 Content-Disposition: form-data; name="cognome" blundo
-----------------------------41184676334 Content-Disposition: form-data; name="matricola" 53/7777
-----------------------------41184676334
Il metodo PUT
!Il metodo PUT serve per trasmettere delle informazioni dal client al server, creando o sostituendo la risorsa specificata.
! In generale, l’argomento del metodo PUT è la risorsa che ci si aspetta di ottenere facendo un GET in seguito con lo stesso nome.
!PUT è idempotente ma non sicuro, e comunque non offre nessuna garanzia di controllo degli accessi o locking.
Esempio di response
HTTP/1.1 200 OK
Date: Wed, 12 Feb 2003 12:43:01 GMT
Server: Apache/1.3.22 (Unix) (Red-Hat/Linux) Last-Modified: Wed, 16 Oct 2002 09:47:40 GMT ETag: "dbca-2-3dad35bc"
Accept-Ranges: bytes
Content-Length: 2
Connection: close
Content-Type: text/html
<HTML> <BODY>
Ciao mondo!
</BODY></HTML>
Status Code – 1
!Lo status code è un numero di tre cifre, di cui la prima indica la classe della risposta, e le altre due la risposta specifica. Esistono le seguenti classi:
– 1xx: Informational
• Una risposta temporanea alla richiesta, durante
il suo svolgimento.
– 2xx: Successful
• Il server ha ricevuto, capito e accettato la
richiesta.
Status Code – 2
– 3xx: Redirection
• Il server ha ricevuto e capito la richiesta, ma sono necessarie altre azioni da parte del client per portare a termine la richiesta.
– 4xx: Client error
• La richiesta del client non può essere soddisfatta per un errore da parte del client (errore sintattico o richiesta non autorizzata).
– 5xx: Server error
• La richiesta può anche essere corretta, ma il server non è in grado di soddisfare la richiesta per un problema interno (suo o di applicazioni CGI).
Esempi di status code
100 Continue (se il client non ha ancora mandato il body)
200 OK (GET con successo)
201 Created (PUT con successo)
301 Moved permanently (URL non valida, il server conosce la
nuova posizione
400 Bad request (errore sintattico nella richiesta)
401 Unauthorized (manca l’autorizzazione)
403 Forbidden (richiesta non autorizzabile)
404 Not found (URL errato)
500 Internal server error (tipicamente un CGI mal fatto)
501 Not implemented (metodo non conosciuto dal server)
Status code reason-phrase Codice di stato motivazione
I cookie – 1
! HTTP è stateless
– Il server non mantiene alcuna informazione sulle
vecchie richieste del client
!Un cookie è una stringa scambiata tra il
server ed il client
– Il client mantiene con un cookie lo stato di precedenti connessioni, e lo invia al server di pertinenza ogni volta che richiede un documento.
– Non è previsto in HTTP, ma è un’estensione di Netscape, proposta nell’RFC 2109
– Per questioni di sicurezza/privacy si possono spedire cookies solo al server che li ha settati
I cookie – 2
! I cookies usano due extension-header1, uno per la risposta, ed uno per richieste successive:
– Set-Cookie: header della risposta, il client può memorizzare il valore del cookie indicato e rispedirlo alla prossima richiesta.
– Cookie: header della richiesta contenente il valore del cookie.
• Il client decide se spedirlo sulla base del nome del documento, del