Protocolli strato applicazione in Internet Gruppo Reti TLC nome.cognome@polito.it http://www.tlc-networks.polito.it/ Protocolli di strato applicativo - 1 Modello client-server Tipica applicazione tra client e server Client: inizia comunicazione verso server chiede servizio al server (WWW, email) application transport network data link physical request reply Server: fornisce servizio richiesto se disponibile invio pagine Web, email application transport network data link physical Protocolli di strato applicativo - 2
Protocolli strato applicazione Risoluzione indirizzi DNS Posta elettronica SMTP, POP3, IMAP Trasferimento file FTP Condivisione file NFS Emulazione di terminale (accesso remoto) telnet World Wide Web HTTP Newsgroup NTTP Gestione rete SNMP Molti protocolli basati su comandi in caratteri ASCII! Protocolli di strato applicativo - 3 DNS: Domain Name System Basato sul concetto di dominio Spazio dei nomi gerarchico con valori arbitrari associati ad ogni etichetta Ogni nome è separato dal successivo dal carattere. La maggior parte dei nomi in Internet sono conformi allo standard suggerito Protocolli di strato applicativo - 4
DNS: Gerarchia dei nomi Domini di primo livello Gerarchia organizzativa (.com,.edu,.gov,.mil,.net,.org) Gerarchia nazionale (.it,.uk,.fr) Domini di secondo livello Ad esempio quelli universitari (stanford, polito) o quelli di organizzazioni di grandi dimensioni (nsf) Ad ogni nome è associato un tipo, che definisce se l'indirizzo è associato ad un host, ad un utente, ad una casella di posta elettronica Protocolli di strato applicativo - 5 DNS: Caratteristiche Sono supportati gli alias tra nomi logici ed indirizzi IP e viceversa Per accedere ai servizi si consulta un domain name server Le informazioni sono distribuite nella rete su diversi DNS, Domain Name Server Organizzati ad albero con root DNS e DNS dei vari domini Ogni sottorete (logica) Internet ha un proprio DNS primario, che contiene informazioni locali e può essere interrogato da host che appartengono alla stessa o ad altre sottoreti logiche, nonché da altri DNS Protocolli di strato applicativo - 6
DNS: Caratteristiche Importanza di buone politiche di caching per evitare di contattare troppe volte altri DNS al di fuori della sottorete logica. Ogni DNS risponde ad una well known port (53 per UDP e TCP). Si possono utilizzare direttamente gli indirizzi Internet evitando di contattare il name server. Protocolli di strato applicativo - 7 Posta elettronica Nei sistemi di posta elettronica si possono identificare (utilizzando terminologia OSI): UA (User Agent) interfaccia con l'utente fornisce servizi di invio e ricezione messaggi, gestione liste di indirizzi, gestione cartelle (folder) MTA (Message Transfer Agent) accetta i messaggi dallo UA e si comporta come un ufficio postale elettronico MS (Message Store) memorizzazione messaggi in transito o destinati ad un determinato MTA Protocolli di strato applicativo - 8
Posta elettronica UA P - UA - UA UA P-UA-MTA P-UA-MS MTA MS P-MTA-MTA MTA P-MTA-MTA MTA MS Presentation (and lower) layer Protocolli di strato applicativo - 9 Posta elettronica: protocolli Sono definibili quattro tipologie di protocolli: Comunicazione tra due UA Comunicazione tra due MTA Comunicazione tra UA e MTA Comunicazione tra UA e MS In OSI sono standardizzati tutti e quattro In Internet solo tre Protocolli di strato applicativo - 10
Posta elettronica: Internet Gli standard e i protocolli fondamentali sono: il formato dei messaggi di posta (RFC 822), il formato MIME per la definizione del formato dei dati, che estende il formato dell'rfc 822 P-UA-UA il protocollo SMTP (RFC 821), P-MTA-MTA usato anche in alcuni casi come P-UA-MTA ma solo da UA ad MTA il protocollo POP (RFC 1939), quasi P-UA-MS monodirezionale, solo per prelevare, da MS a UA il protocollo IMAP (RFC 2060), P-UA-MS bidirezionale Protocolli di strato applicativo - 11 RFC 822: Standard per il formato dei messaggi Definisce: formato per il trasferimento di messaggi ASCII puri (7 bit) formato degli indirizzi di posta elettronica Divisione solamente concettuale tra busta (envelope) e contenuto (message) Ogni mail contiene una intestazione (envelope) in ASCII e di seguito il messaggio stesso in ASCII (segnalazione in banda) Protocolli di strato applicativo - 12
RFC 822: Standard per il formato dei messaggi Ogni campo (riga) dell'intestazione contiene una parola chiave, seguita dal carattere ':' e da un valore. Ad esempio From: andrea@polito.it (Andrea Bianco) Gli indirizzi sono indicati come nome_utente@host.dominio Protocolli di strato applicativo - 13 From Reply to CC In-Reply-To References Subject Keywords Date Message-ID Comments Encrypted X- RFC 822: Intestazione Campi dell intestazione Sender To Received from Received by Received via Received with Descrizione Indirizzo mittente Indirizzo destinatario Messaggio arrivato da (aggiunto ad ogni hop) Messaggio ricevuto da (aggiunto ad ogni hop) Mezzo fisico su cui ha viaggiato Protocollo utilizzato Nome del mittente Indirizzo a cui inviare risposta (automatica) Indirizzo a cui inviare in copia il messaggio Identificatore di messaggio cui si sta rispondendo Altri messaggi relativi Argomento del messaggio Descrizione contenuto Data di invio Identificativo di messaggio Commenti utente Indice in tabella di chiavi di crittografia Messaggi accettati ma non esaminati (compatibilità) Protocolli di strato applicativo - 14
MIME: Multi-purpose Internet Mail Extension Definizione formato per messaggi multimediali, estensione dei messaggi in formato testo dell'rfc 822 (caratteri ASCII a 7 bit) Struttura messaggio MIME: Intestazione (header) Corpo del messaggio (body) Header e body sono separati da una linea vuota Protocolli di strato applicativo - 15 MIME: principali campi nell header Formato campo: valore MIME-Version: versione dello standard MIME Content-Type: tipo dati contenuti nel body Content-Transfer-Encoding: tipo di codifica utilizzato per i dati contenuti nel body Content-ID: opzionale, identificatore univoco del messaggio Content-Description: opzionale, descrizione non formale del contenuto del body Protocolli di strato applicativo - 16
MIME: Campi nell header Content-: permetterà di definire futuri campi dell intestazione MIME, distinguendoli, ad esempio, dai campi definiti nell RFC 822 Qualunque altro campo è ignorato (per permettere compatibilità con i campi definiti nell RFC 822) Protocolli di strato applicativo - 17 MIME: campo Content-Type Suddiviso in un Type e un Subtype separati dal carattere / e terminati con il carattere ; Seguono poi eventualmente alcuni parametri, sotto la forma attributo=valore, che dipendono dal sottotipo utilizzato Sono stati definiti un insieme iniziale di tipi e di corrispondenti sottotipi Estensioni a questo insieme possono essere richieste e devono essere identificate mediante il prefisso X- Protocolli di strato applicativo - 18
MIME: campo Content-Type I tipi (Type) predefiniti sono: Text Application Image Audio Video Multipart Message Esempi: Content-Type: text/plain; charset=us-ascii Content-Type: message/external-body Content-Type: multipart/mixed Content-Type: application/postscript Protocolli di strato applicativo - 19 MIME: il tipo Text Il tipo text si riferisce a dati di tipo testo L'attributo charset permette di specificare il set di caratteri utilizzato per rappresentare il testo Sottotipi del tipo text sono: plain, che specifica testo senza formattazione richtext, testo formattato html, indica che il contenuto del messaggio è una pagina WWW, ovvero una pagina descritta mediante il linguaggio HTML Protocolli di strato applicativo - 20
MIME: il tipo multipart Si riferisce ad un oggetto composto da componenti diverse. Ciascuna componenente è caratterizzata da un header e un body L'attributo boundary identifica la stringa di caratteri utilizzata per separare i diversi componenti I sottotipi del tipo multipart sono: mixed: sottotipi indipendenti alternative: stesso dato in formati diversi parallel: le componenti devono essere presentate insieme e non in modo sequenziale digest: ciascuna componente è di tipo message Protocolli di strato applicativo - 21 MIME: il tipo message Si riferisce ad un oggetto incapsulato I sottotipi del tipo message sono: rfc822: messaggio in formato RFC 822 partial: parti di messaggi in formato 822 (ricostruibili mediante gli attributi id, number, total) external-body: si riferisce ad una sorgente esterna di dati. Il metodo di accesso a tali dati è specificato dall'attributo access-type che può assumere come valori: ftp, anon-ftp, mail-server, local-file Protocolli di strato applicativo - 22
MIME: il tipo message Esempio: Content-type: message/external-body name="pippo.ps" site=ftp.polito.it access-type=ftp Protocolli di strato applicativo - 23 MIME: i tipi image, audio, video e application Permettono di specificare che i dati sono di tipo immagine, audio e video oppure sono dati dipendenti dall'applicazione i sottotipi del tipo image sono jpeg e gif il sottotipo di audio è basic il sottotipo di video è mpeg i sottotipi di application sono octet-stream per i dati binari e postscript per i file postscript Sono previste estensioni per i sottotipi di tutti questi tipi, che saranno identificate dal prefisso X- Ad esempio: application/x-java-applet Protocolli di strato applicativo - 24
MIME: campo Content-Encoding Permette di specificare la codifica adottata per il messaggio (e di conseguenza la decodifica da applicare) e il dominio del messaggio codificato, ovvero il formato finale dei dati Le codifiche definite sono: quoted-printable: si riferisce ad una codifica, utile per la stampa del testo, che mantiene il testo quasi leggibile base64: si riferisce ad una codifica che rende il testo incomprensibile Entrambe producono un oggetto del dominio 7bit, quindi in un formato trasportabile con i sistemi di posta elettronica tradizionali Protocolli di strato applicativo - 25 MIME: campo Content-Encoding Le codifiche permettono infatti di superare le limitazioni di alcuni protocolli o di alcuni mail server che non sono in grado di supportare codifiche complicate, oppure sono utilizzate per codificare in modo testo programmi eseguibili e file binari In assenza di una codifica, si specifica il dominio, ovvero la codifica originaria: 7bit, 8bit o binary È possibile definire nuove codifiche, pur di nominarle con il prefisso x- Protocolli di strato applicativo - 26
MIME: un esempio Mime-Version: 1.0 Content-transfer-encoding: 7BIT Content-Type: multipart/mixed; boundary="----=_nextpart_000_01bd388e.a80f7a20" This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. - ------ =_NextPart_000_01BD388E.A80F7A20 Content-Type: text/plain Ti invio una versione aggiornata dei documenti Ciao Protocolli di strato applicativo - 27 MIME: un esempio - ------ =_NextPart_000_01BD388E.A80F7A20 Content-Type: application/msword; name="hppc_capb.doc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="hppc_capb.doc 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7 /CQAGAAAAAAAAAAAAAAACAAAArQAAAAAAAAAAEA AArwAAAAEAAAD+////AAAAAKsAAACsAAAA///// /////////////////////////////////////// ////////////////////////////////////// ////////////////////////////////// - ------ =_NextPart_000_01BD388E.A80F7A20-- Protocolli di strato applicativo - 28
SMTP: Simple Mail Transfer Protocol Specifica il protocollo per trasportare un messaggio di posta elettronica da una macchina ad un'altra macchina, ovvero tra due MTA Non specifica come il gestore di mail accetta messaggi da parte dell'utente Non specifica il metodo di memorizzazione e la frequenza di tentativi di invio dei messaggi La comunicazione tra un client ed un server consiste nello scambio di comandi in caratteri ASCII (è quindi leggibile) Utilizza la porta 25 del protocollo TCP Protocolli di strato applicativo - 29 SMTP I messaggi attendono sempre un riscontro (ACK) Inizialmente si stabilisce una connessione (TCP) tra client e server Il client attende dal server il messaggio 220 READY FOR MAIL Il client risponde con HELO ed identificandosi Il server si identifica con il mesaggio 250 Protocolli di strato applicativo - 30
SMTP Il client può trasferire più messaggi, chiudere la connessione oppure chiedere di scambiare ruolo tra client e server Il trasferimento di un messaggio inizia con il comando MAIL FROM: Il server risponde con 250 OK Seguono una serie di comandi che identificano i destinatari del messaggio: RCPT TO:, ad ognuno dei quali il server risponde con 250 OK oppure con 550 se si verifica un errore Protocolli di strato applicativo - 31 SMTP Il comportamento in caso di errore non è specificato (ma quasi tutti i client inviano il messaggio a tutti gli altri destinatari e riportano l'errore a chi ha inviato il messaggio) Il client inizia la trasmissione dell'intestazione e del messaggio con comando DATA Il server risponde con 354 Start mail input, seguito dalla sequenza di caratteri utilizzata per terminare il messaggio di mail La comunicazione termina con il comando QUIT Protocolli di strato applicativo - 32
SMTP: esempio di comunicazione Server: 220 Beta.gov Simple Mail Transfer Service Ready Client: HELO Alpha.edu Server: 250 Beta.gov Client: MAIL FROM:<Smith@alpha.edu> Server: 250 OK Client: RCPT TO:<Jones@Beta.edu> Server: 250 OK Client: RCPT TO:<Early@Beta.edu> Server: 550 No such user Protocolli di strato applicativo - 33 SMTP: esempio di comunicazione Client: DATA Server: 354 Start mail input; end with <CR><LF>.<CR><LF> Client: body of the message Client: body of the message Client: <CR><LF>.<CR><LF> Server: 250 OK Client: QUIT Server: 221 Beta.gov Service closing transmission channel Protocolli di strato applicativo - 34
POP: Post Office Protocol Non conviene mantenere sempre attivo un sistema di trasporto di messaggi di posta elettronica: un calcolatore potrebbe non avere le risorse computazionali per mantenere attivo un SMTP server un calcolatore potrebbe non essere permanentemente attivo e connesso alla rete È necessario utilizzare uno User Agent su tali sistemi Protocolli di strato applicativo - 35 POP3 Il protocollo POP3 permette di interrogare un server di posta elettronica Fornisce solo la funzionalità di trasferimento dei messaggi dal MS allo UA Servizio POP 3 fornito dal server sulla porta 110; il protocollo utilizza connessioni TCP Protocolli di strato applicativo - 36
POP3: caratteristiche Comandi (ASCII) organizzati per parole chiave case insensitive, seguite da uno o più parametri opzionali Il separatore tra parole chiave e parametri è lo spazio Ad ogni comando del client corrisponde una risposta del server Protocolli di strato applicativo - 37 POP3: risposte del server Organizzate come: indicatore di stato parola chiave informazione addizionale (con lunghezza massima 512 caratteri) L'indicatore di stato può assumere due valori: +OK e ERR in caratteri maiuscoli Le risposte multilinea sono terminate da una riga contenente il carattere., oltre ai terminatori di linea <CR><LF> Protocolli di strato applicativo - 38
POP3: comandi principali Comandi USER stringa PASS stringa QUIT APOP Descrizione Comandi in Authorization State Nome utente Password Uscita da authorization state (opzionale) Metodo di riconoscimento basato su crittografia Protocolli di strato applicativo - 39 POP3: comandi principali Comandi STAT LIST [msg] RETR msg DELE msg NOOP RSET QUIT TOP msg # UIDL [msg] Descrizione Comandi in Transaction State Richiesta generica informazioni. La risposta conterrà numero di messaggi e dimensione totale Richiesta informazioni specifiche. La risposta può essere multilinea e contenere numero di messaggio e dimensione più una riga di info per ogni messaggio Richiesta trasmissione messaggio Richiesta cancellazione messaggio. Verifica esistenza del server Cancellazione richieste di cancellazione Chiusura connessione (opzionale) Richiesta invio # linee (esclusa intestazione) del messaggio msg (opzionale) Richiesta assegnazione numero univoco a messaggio Protocolli di strato applicativo - 40
POP3: esempio di comunicazione Server: +OK POP 3 Server ready <1896.697 170952@dbc.mtview.ca.us> Client: APOP mrose c4c933bac560ecc979... Server: +OK mrose maildrop has 2 messages (320 octets) Client: STAT Server: +OK 2 320 Protocolli di strato applicativo - 41 POP3: esempio di comunicazione Client: LIST Server: +OK 2 messages (320 octets) Server: 1 120 Server: 2 200 Server:. Client: RETR 1 Server: +OK 120 octets Server: < Invio messaggio 1> Server: < Segue invio messaggio 1> Server:. Protocolli di strato applicativo - 42
POP3: esempio di comunicazione Client: DELE 1 Server: +OK message 1 deleted Client: RETR 2 Server: +OK 200 octets Server: < Invio messaggio 2> Server: < Segue invio messaggio 2> Server:. Client: DELE 2 Server: +OK message 2 deleted Client: QUIT Server: +OK POP 3 Server signing off (maildrop empty) Protocolli di strato applicativo - 43 WWW (World Wide Web): caratteristiche Introdotto dal Cern nel 1990 e presentato nel 1991 Ha avuto una diffusione enorme ed è stata la causa principale dell'esplosione recente di Internet Permette la consultazione di documenti disponibili su Internet in modalità ipertestuale. Un ipertesto è un testo in cui è possibile associare ad alcuni elementi (ad esempio le parole) un riferimento ad altri documenti. Tali parole sono dette ancore o collegamenti ipertestuali. Protocolli di strato applicativo - 44
WWW: caratteristiche Fornisce una interfaccia grafica semplice e intuitiva, che contiene testi, immagini, filmati e che consente di creare interfacce per l'accesso a basi di dati e archivi Permette una compatibilità semplice con i servizi di altro tipo forniti su Internet quali news, ftp, telnet, gopher Protocolli di strato applicativo - 45 WWW: caratteristiche Le pagine sono create utilizzando il linguaggio HTML (Hyper Text Markup Language), un linguaggio per la descrizione degli ipertesti Lo scambio di messaggi tra server WWW e client WWW si basa sul protocollo HTTP (Hyper Text Transfer Protocol), definito negli RFC 1945 (versione 1.0) e RFC 2068 (versione 1.1) Protocolli di strato applicativo - 46
WWW: funzionamento L'utente (il client) richiede una risorsa specificandone la URL (Uniform Resource Locator) o URI (Uniform Resource Identifier) mediante il browser. La URL non necessariamente si riferisce ad una pagina WWW, ma ad una generica risorsa Internet Il browser interpreta l'url ed inoltra una richiesta al server opportuno utilizzando il protocollo appropriato (FTP, GOPHER, HTTP) Il server fornisce la risorsa richiesta (oppure un messaggio di errore) utilizzando lo stesso protocollo Protocolli di strato applicativo - 47 WWW: funzionamento Il browser interpreta i contenuti del messaggio di risposta ed agisce di conseguenza Se la risorsa è una pagina WWW, ovvero un documento HTML, il browser automaticamente inoltra la richiesta delle informazioni (filmati, immagini, applet java, ) cui si fa riferimento nella pagina HTML Il browser interpreta la risorsa ricevuta e la presenta sullo schermo eventualmente con l'ausilio di programmi esterni per la presentazione di filmati o di audio di qualità; tali programmi sono detti plugin Protocolli di strato applicativo - 48
WWW: funzionamento I client WWW, i browser, sono quindi programmi che interpretano il linguaggio HTML e presentano sullo schermo le pagine WWW e che utilizzano per il trasferimento delle informazioni il protocollo HTTP e il formato di indirizzamento proprio delle URL I browser sono anche in grado di utilizzare altri protocolli per fornire interfaccia con i servizi più tradizionali disponibili su Internet Protocolli di strato applicativo - 49 Formati e protocolli per il WWW Formato MIME definizione del formato dei dati, estensione del formato dei messaggi di posta elettronica definiti nell'rfc 822 Formato URL (RFC 2396) definizione del formato utilizzato per identificare le risorse Protocollo HTTP (RFC 2068) trasmissione delle informazioni tra client e server WWW Protocolli di strato applicativo - 50
Formati e protocolli per il WWW Linguaggio HTML descrizione dei documenti ipertestuali Interfaccia CGI per potere dialogare con altre applicazioni non appartenenti al mondo WWW (ad esempio, per ottenere accesso alle basi dati) Protocolli di strato applicativo - 51 URL: Uniform Resource Locator Per identificare una risorsa su Internet si utilizza una forma di indirizzamento definita in modo formale mediante una sintassi La risorsa è denominata URL (Uniform Resource Locator) oppure URI (Uniform Resource Identifier). Il formato è definito nell'rfc 2396. Protocolli di strato applicativo - 52
URL: Uniform Resource Locator Una URL definisce: un protocollo (servizio) per accedere alla risorsa opzionalmente, una coppia <nome_utente, password>, ad esempio per il servizio ftp il nome del server (un indirizzo IP simbolico o numerico) presso cui il servizio è disponibile ed opzionalmente la porta TCP a cui tale servizio viene fornito il direttorio (path) che contiene la risorsa il nome della risorsa (nome file che la contiene) eventuali parametri che si intende passare alla risorsa Protocolli di strato applicativo - 53 Ad esempio, la URL URL: Esempio http://hp0tlc.polito.it/~bianco/ identifica: protocollo http server hp0tlc.polito.it path ~bianco come il direttorio in cui trovare la risorsa necessaria Protocolli di strato applicativo - 54
URL: protocolli supportati Protocollo http ftp gopher mailto news telnet Servizio Pagine WWW File Gopher Posta elettronica Usenet news Sessioni interattive Esempio http://www.w3.org/ http://www.alpcom.it/ski/ http://altavista.digital.com/cgibin/query?what=web\&q=andrea+bianco ftp://guest/guest@ftp.ms.com/pub/file.tar.gz;type=i gopher://services.csp.it:70/11/teletext/rai/notizie mailto:bianco@polito.it news:www.polito.it telnet://pol88a.polito.it Protocolli di strato applicativo - 55 Il protocollo HTTP Il protocollo HTTP (Hyper Text Transfer Protocol) è definito nell'rfc 1945 per la versione 1.0 e nell'rfc 2068 per la versione 1.1 Utilizzato per il trasferimento delle informazioni tra client e server WWW Basato sull'invio di richieste da parte del client risposte da parte del server Stateless (privo di memoria) Protocolli di strato applicativo - 56
HTTP: formato messaggi Un messaggio HTTP permette di trasferire entità (entity) mediante richieste inviate da client WWW e/o risposte inviate da server WWW Indipendentemente dal fatto che sia una richiesta o una risposta, un messaggio HTTP, è formato da una intestazione (header) e, opzionalmente, da un corpo del messaggio (message body), separati mediante una linea vuota. Protocolli di strato applicativo - 57 Messaggio richiesta http Messaggi di richiesta: ASCII (leggibili dagli umani) Linea di richiesta (GET, POST, HEAD commands) Linee di header Carriage return, line feed indica fine messaggio GET /somedir/page.html HTTP/1.1 Connection: close User-agent: Mozilla/4.0 Accept: text/html, image/gif,image/jpeg Accept-language:fr (extra carriage return, line feed) Protocolli di strato applicativo - 58
Richiesta http: formato generale Protocolli di strato applicativo - 59 Messaggio di risposta http Linea di stato (protocollo codice di stato commento) header lines HTTP/1.1 200 OK Connection: close Date: Thu, 06 Aug 1998 12:00:15 GMT Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun 1998... Content-Length: 6821 Content-Type: text/html data data data data data... dati, ad esempio file HTML Protocolli di strato applicativo - 60
HTTP: funzionamento Il funzionamento si può schematizzare così: il client invia una richiesta al server, normalmente sulla porta TCP 80, chiedendo l'apertura di una connessione ed il trasferimento di una risorsa il server accetta (oppure rifiuta) se il server accetta, invia una risposta contenente la risorsa richiesta se il server rifiuta, invia una risposta contenente il motivo del rifiuto il client chiude la connessione Protocolli di strato applicativo - 61 HTTP: differenze tra versioni Nella versione 1.0 ogni connessione permette un singolo trasferimento; se il client deve richiedere più risorse per ottenere l'informazione completa, deve aprire una connessione per ogni risorsa. Nella versione 1.1 è possibile mantenere aperta una connessione e richiedere il trasferimento di più risorse. Protocolli di strato applicativo - 62
HTTP: proxy, gateway e tunnel È possibile che la comunicazione tra client e server WWW avvenga attraverso intermediari, quali proxy, gateway e tunnel. Un proxy riceve le richieste del client, le instrada al server opportuno (solo se ciò si rende necessario) e si occupa di consegnare al client la risposta corrispondente Un gateway trasforma le richieste HTTP in richieste a server che utilizzano altri protocolli (ad esempio nel caso di uso di cgi) e le risposte ricevute dal server in risposte HTTP Protocolli di strato applicativo - 63 HTTP: proxy, gateway e tunnel Un tunnel è realizzato ad esempio sui firewall, macchine predisposte a creare protezioni all'interno di reti aziendali mediante filtraggio delle informazioni. Dal punto di vista WWW, un tunnel è un oggetto completamente trasparente che trasmette risposte e richieste senza modificarle. Tutte le richieste appaiono come generate dal firewall. Protocolli di strato applicativo - 64
HTTP: caching Esistono, quando client e server interagiscono, diverse possibilità di caching, cioè di memorizzazione temporanea di informazioni allo scopo di ridurre il traffico sulla rete I browser forniscono una cache a due livelli, in memoria e su disco. I proxy forniscono una cache dei documenti referenziati più recenti. A fronte di una richiesta da parte di un client WWW forniscono la loro copia dei documenti se disponibili e aggiornati; solo in caso negativo richiedono al server WWW (o ad un altro proxy) la copia della risorsa richiesta. Spesso i proxy memorizzano informazioni statistiche su tipo, quantità e provenienza delle richieste, nonchè indici di frequenza di consultazione dei documenti. Protocolli di strato applicativo - 65 HTTP: intestazioni dei messaggi Si basano sul formato di tipo generale descritto nell RFC 822 e sono suddivise in: intestazioni di tipo generale intestazioni di entità intestazioni di richiesta intestazione di risposta Ciascun tipo di intestazione specifica un insieme di nomi di campi ammissibili, trasmessi secondo il formato nome: valore L'ordine dei campi all'interno delle intestazioni non è significativo, né è determinato un ordine tra intestazioni. Protocolli di strato applicativo - 66
HTTP: corpo del messaggio Coincide con l entità che si deve trasferire, a meno di eventuali codifiche adottate per il trasferimento in rete. Non sempre è ammissibile inserire un corpo di messaggio dopo una intestazione Protocolli di strato applicativo - 67 HTTP: intestazioni generali Esistono alcuni campi, definiti nelle intestazioni generali, che hanno validità sia per comandi che per risposte, ma che non si riferiscono all'entità che si sta trasferendo, ma al corpo del messaggio: Cache-Control: permette di definire il comportamento da seguire per gli elementi che concorrono ai meccanismi di caching. Può assumere valori differenti se associato a richieste: no-cache, max-age=, a risposte: public, private, no-cache, no-transform Connection: definisce proprietà della connessione: ad esempio non sono supportate le connessioni persistenti Date: data (giorno e ora) in cui è stato creato il messaggio Protocolli di strato applicativo - 68
HTTP: intestazioni generali MIME-Version: versione MIME (se) utilizzata Pragma:no-cache: direttiva opzionale per eventuali proxy incontrati Transfer-Encoding:chunked: codifica del messaggio trasferito (non dell'entità) Upgrade: permette di specificare altri protocolli di livello applicazione che si vorrebbero utilizzare Via: utilizzato da gateway e proxy per indicare il protocollo e gli intermediari che hanno trasferito le informazioni tra client e server. Esempio: Via: 1.0 ricky, 1.1 ethel, 1.0 fred Protocolli di strato applicativo - 69 HTTP: intestazioni di entità I principali campi relativi all'entità sono: Allow: elenco dei metodi ammessi sull'entità Content-Encoding: codifica adottata sull'entità; deve essere utilizzata la corrispondente decodifica per ottenere il tipo MIME dell'entità. Esempio: Content-Encoding: gzip Content-Language: linguaggio dell'entità Content-Length: dimensione del corpo del messaggio in ottetti Protocolli di strato applicativo - 70
HTTP: intestazioni di entità Content-Type: tipo MIME dell'entità Expires: data oltre la quale il contenuto non deve più essere considerato attendibile; la cache considera questa entità in stato di stale, ovvero come non utilizzabile Last-Modified: data dell'ultima modifica dell'entità. Protocolli di strato applicativo - 71 HTTP: formati delle richieste In una richiesta HTTP, oltre ai campi delle intestazioni generali e di entità, si specificano: nella prima riga il metodo, ovvero la funzionalità richiesta (DELETE, GET, HEAD, OPTIONS, POST, PUT, TRACE) la risorsa cui accedere, ovvero la URL la versione del protocollo utilizzata i campi delle intestazioni di richiesta Protocolli di strato applicativo - 72
HTTP: formati delle richieste I metodi permettono: GET: richiedere il trasferimento dell'entità cui si fa riferimento nella URL HEAD: richiedere il trasferimento delle meta-informazioni associate alla risorsa, ma non dell'entità stessa. Utilizzata per controlli sull'aggiornamento delle informazioni memorizzate in cache POST: indica al server che l'entità inclusa comprende informazioni utili per il programma cui si fa riferimento nella URL; utilizzato per inviare messaggi sui newsgroup o sulle mailing-list, dati contenuti nei form HTML oppure dati per ricerche su basi dati che prevedono la modifica della base dati stessa Protocolli di strato applicativo - 73 HTTP: formati delle richieste PUT: richiede creazione o modifica della URL cui si fa riferimento DELETE: richiede cancellazione della URL cui si fa riferimento TRACE: utilizzato per debugging; richiede l'invio nella risposta di una copia del messaggio inviato al server OPTIONS: permettere di conoscere le capacità del server e le opzioni supportate. Protocolli di strato applicativo - 74
HTTP: intestazioni delle richieste I campi principali sono: Accept: specifica i tipi di dati accettati ed un indice di qualità (preferenza) tra i diversi formati. Esempio: Accept: text/plain; q=0.5, text/html, text/x-dvi;q=0.8 specifica che il tipo preferito è html, il meno interessante plain Accept-Charset: insieme di caratteri accettati Accept-Encoding: codifiche accettate (esempio: compress, gzip) Accept-Language: linguaggi accettati From: indirizzo di posta elettronica del richiedente Protocolli di strato applicativo - 75 HTTP: intestazioni delle richieste Host: specifica il nome simbolico dell'host Internet cui si richiede la risorsa If-modified-since: la risorsa deve essere trasmessa solo se modificata successivamente alla data specificata; utilizzato con il metodo GET Range: permette di richiedere solo parti di risorse Referer: specifica l'url del documento che contiene il riferimento alla risorsa richiesta User-Agent: informazioni sul programma che ha effettuato la richiesta di trasferimento dati. Protocolli di strato applicativo - 76
HTTP: formati delle risposte Nell'intestazione di una risposta HTTP inviata da un server WWW si specificano: nella prima riga la versione del protocollo HTTP utilizzata un codice che specifica il tipo di esito associato alla richiesta un testo di diagnostica i campi delle intestazioni di risposta Protocolli di strato applicativo - 77 HTTP: classi di codici di risposta Le principali classi di codici di esito della richiesta, identificabili dal primo numero del codice, sono: Codice 1xx 2xx 3xx 4xx 5xx Significato Non utilizzati in HTTP 1.0, informativi in HTTP 1.1 Richiesta portata a termine con successo Richiesta che richiede ulteriori specifiche per essere soddisfatta Richiesta errata o mancanza di autorizzazione per accedere alla risorsa Errore del server (servizio non disponibile) Protocolli di strato applicativo - 78
HTTP codici di risposta: esempi Codice Significato 100 Continue, prosegui con operazioni 101 Switching protocol, cambiato protocollo di comunicazione 200 OK 201 Created, URL creata 202 Accepted, comando accettato (ma non ancora eseguito) 300 Multiple choice, possibile scegliere tra più formati 301 Mover parmanently, URL dislocata altrove 303 Not modified, risorsa non modificata (risposta a GET condizionale) 400 Bad request, il server non capisce 401 Unauthorized 402 Payment required 404 Not found 405 Method not allowed 410 Gone, la risorsa non è disponibile 415 Unsupported media type 500 Internal server error 503 Service unavailable 504 Gateway timtout Protocolli di strato applicativo - 79 HTTP: intestazioni delle risposte Alcuni campi sono: Age: tempo passato da quando la risorsa è stata inviata dal server; Location: identificazione del sito che contiene la risorsa richiesta nel caso in cui sia stata trasferita; Proxy-Authenticate: specifica lo schema di autenticazione richiesto per potere accedere alla risorsa; Public: specifica l'insieme di metodi accettati dal server; Protocolli di strato applicativo - 80
HTTP: intestazioni delle risposte Retry-After: utilizzato con codice 503 (Service Unavailable); Server: identificazione del software utilizzato dal server; Warning: utilizzato per trasferire messaggi intellegibili agli umani su eventuali malfunzionamenti; WWW-Authenticate: contiene richiesta di autorizzazione secondo uno schema definito, se tale autorizzazione era mancante. Protocolli di strato applicativo - 81 Autenticazione Obiettivo: controllare client accesso a documenti sul server stateless: ogni richiesta deve presentare codice autenticazione autorizzazione: name, password intestazione in msg. richiesta se manca, server rifiuta e invia nell header una linea WWW authenticate: richiesta http normale 401: authorization req. WWW authenticate: richiesta http normale + Authorization:line risposta http normale richiesta http normale + Authorization:line Risposta http normale server Protocolli di strato applicativo - 82 tempo
Cookies server invia cookie al client quando risponde Set-cookie: # client invia cookie nelle richieste successive cookie: # server confronta cookie inviato con quelli memorizzati autenticazione profili utenti client Richiesta http normale Risposta http normale + Set-cookie: # Richiesta http normale cookie: # Risposta http normale Richiesta http normale cookie: # Risposta http normale server Azione cookiespecific Azione cookiespecific Protocolli di strato applicativo - 83 Obiettivo: non inviare oggetto se uguale a quello del client (cache) client: invia data copia oggetto in cache nella richiesta http If-modified-since: <date> server: risponde senza oggetto se cache valida HTTP/1.0 304 Not Modified GET condizionale client Richiesta http If-modified-since: <date> Risposta http HTTP/1.0 304 Not Modified Richiesta http If-modified-since: <date> Risposta http HTTP/1.1 200 OK <data> server Oggetto non modificato Oggetto modificato Protocolli di strato applicativo - 84
HTTP: formati delle entità Il tipo del documento, ovvero il suo formato MIME, è determinato dal server sulla base di associazioni predefinite tra estensione del nome file e tipo di dato Estensione.html.htm.txt.ps.gif.jpg.jpeg.tiff.xbm.mov.mpeg.au.aiff.tif.mpg Tipo MIME dei dati text/html text/plain application/postscript image/gif image/jpeg image/x-tiff image/x-bitmap movie/x-quicktime movie/mpeg sound/basic sound/x-aiff Protocolli di strato applicativo - 85 HTTP: esempi di richieste GET index.html HTTP/1.0 GET /public_html/index.html HTTP/1.1 Date: Fri, 28 Feb 1997 13:24:05 GMT Pragma: no-cache From: bianco@polito.it Referer: http://hp0tlc.polito.it/~bianco/ User-Agent: Nescape 3.1 If-Modified-Since: Mon, 24 Feb 1997 19:00:00 GMT Protocolli di strato applicativo - 86
HTTP: esempi di risposte HTTP/1.0 200 Document follows Date: Fri, 28 Feb 1997 14:11:22 GMT Server: NCSA/1.5.1 Last-modified: Wed, 20 Nov 1996 16:20:16 GMT Content-type: text/html Content-length: 4168 <HTML><HEAD><TITLE> Andrea Bianco - Home Page </TITLE></HEAD> Protocolli di strato applicativo - 87 HTTP: esempi di risposte HTTP/1.0 404 Not Found Date: Fri, 28 Feb 1997 14:15:58 GMT Server: NCSA/1.5.1 Content-type: text/html <HEAD><TITLE>404 Not Found</TITLE></HEAD> <BODY><H1>404 Not Found</H1> The requested URL /pippo was not found on this server. </BODY> Protocolli di strato applicativo - 88
Interazione con server http 1. Telnet verso un sito http (porta 80): telnet www.eurecom.fr 80 Apre connessione TCP sulla porta 80 (porta di default server http) a www.eurecom.fr. Tutti caratteri inseriti da tastiera inviati alla porta 80 di www.eurecom.fr 2. Inserire da tastiera una richiesta http GET: GET /~ross/index.html HTTP/1.0 Premendo due volte return si invia richiesta GET minimale (ma completa) al server http 3. Si vede sul terminale risposta del server! Protocolli di strato applicativo - 89 CGI: Common Gateway Interface Standard che permette di interfacciare applicazioni esterne, ad esempio per permettere l'accesso a basi dati Il funzionamento è basato sull'esecuzione sul server di un programma (eseguibile, di scripting) che riceve come parametri i valori specificati nella richiesta inoltrata dal client Protocolli di strato applicativo - 90
CGI: Common Gateway Interface Il formato della richiesta è standardizzato, mentre il valore, tipo e nome dei parametri dipendono dall'applicativo La risposta viene fornita in un formato accessibile al client WWW, ma deciso di norma dal programma applicativo Il client WWW utilizza la URL per invocare l'esecuzione di un programma. Il server WWW è configurato in modo tale da interpretare un determinato path (normalmente cgi-bin) come una richiesta di esecuzione di un programma memorizzato in un opportuno direttorio. Protocolli di strato applicativo - 91 La URL CGI: esempio http://www2.telematica.it/cgi-bin/txgi.exe?rai/t201 invoca l'esecuzione di un programma txgi.exe con parametri che specificano la ricerca della pagina 201 del televideo. Protocolli di strato applicativo - 92
CGI: Common Gateway Interface I programmi CGI possono essere scritti in un qualunque linguaggio di programmazione: C, Perl, Bourne shell. Per passare le informazioni necessarie all'esecuzione del programma di CGI si possono utilizzare i metodi GET e POST, come specificato nel form HTML normalmente utilizzato come interfaccia per l'esecuzione di programmi cgi-bin. Protocolli di strato applicativo - 93 CGI: metodi GET e POST Il metodo GET passa i parametri necessari codificandoli direttamente nella URL; il server WWW li passerà come variabili di environment al programma. In questo modo è possibile mantenere un riferimento diretto sotto forma di URL ai dati ottenuti dalla ricerca (ad esempio memorizzandoli come bookmarks). Il metodo POST viene utilizzato per trasferire informazioni che sono contenute nel corpo della richiesta; tali informazioni verranno passate mediante lo standard input al programma applicativo. Si superano le limitazioni sulla dimensione e numero dei parametri. Protocolli di strato applicativo - 94
CGI: variabili di ambiente Variabili Request_Method Path_Info Query_String Content_Type Content_Length Server_Protocol Server_Port Script_Name Remote_Host Remote_Addr Auth_Type Remote_user Remote_Ident Costanti Server_Software Sever_Name Gateway_Interface Identifica GET o POST Indicazione del path (segue la URL e precede?) contiene attributo = valore separate da & Tipo di dato (se si utilizza il metodo POST) Dimensione campo (se si utilizza il metodo POST) Versione del protocollo Numero di porta Nome dello script Host che ha fatto la richiesta Indirizzo host da cui proviene la richiesta Tipo di autenticazione Utente che ha fatto la richiesta Nome utente ricavato dal server (ident) Identifica Versione del software Nome del server Versione della specifica CGI Protocolli di strato applicativo - 95 CGI: Common Gateway Interface I risultati del programma CGI sono prodotti sullo standard output. Il programma CGI fornisce come informazione il tipo di documento utilizzando Content_Type e fa seguire il documento separandolo con una riga vuota. Se il programma CGI non è in grado di fornire l'informazione direttamente, ovvero se l'informazione si trova su un altro server WWW, può utilizzare Location per passare al server la URL di destinazione. Se la URL rappresenta un file, tale file sarà inviato dal server WWW al client WWW, altrimenti il server invierà un messaggio di redirezione al client WWW sulla nuova URL. Protocolli di strato applicativo - 96
CGI: Common Gateway Interface Il server trasferisce l'informazione ricevuta dal programma CGI incapsulandola con le informazioni necessarie al protocollo HTTP. La CGI può essere utilizzata per creare interfacce verso basi dati, per interfacciarsi con programmi specifici Unix (ad esempio per fornire supporto al finger all'interno delle pagine HTML), per interfacciarsi con i motori di ricerca, i crawler e i robot. Protocolli di strato applicativo - 97