TCP/IP
Application Layer
Stefano Clemente
[email protected]
© 2005 Stefano Clemente
Livelli nello stack TCP/IP
• C’è qualche problema nel mappare il modello
TCP/IP nel modello OSI in quanto non c’è una
perfetta corrispondenza
Application
HTTP, SMTP, SNMP, FTP,
Telnet, Ssh, NFS
Presentation
SMB, AFP
Session
TLS, SSH,
RPC, NetBIOS
Transport
TCP, UDP, SPX
Network
Data Link
IP, ICMP, IGMP, X.25, CLNP, ARP,
RARP, BGP, OSPF, RIP, IPX, DDP
Ethernet, Token ring, PPP, HDLC,
Frame relay, ISDN, ATM
Physical
4 Ottobre 2005
elettricità, radio, laser
Stefano Clemente
2
Livelli nello stack TCP/IP
• Application, Presentation e Session del
modello OSI sono considerati un unico livello
Application nel TCP/IP
− TCP/IP non ha un unico livello Session sul quale i
livelli superiori poggiano e le funzioni del livello
Session sono scorporate dallo stesso o ignorate
Application
HTTP, FTP, DNS
Transport
TCP, UDP, RTP, SCTP
Network
IP
Data Link
Physical
4 Ottobre 2005
Ethernet, Token ring, PPP, HDLC,
Frame relay, ISDN, ATM
elettricità, radio, laser
tecniche di codifica
Stefano Clemente
3
Application Layer
• L’application layer è la
parte dello stack IP in
cui risiede il lavoro degli
utenti (applicazioni).
• Verranno illustrati i
protocolli:
− HTTP, HTTPS
4 Ottobre 2005
Stefano Clemente
4
Application Layer: Obiettivi
•Aspetti concettuali
dell’implementazione
dei protocolli di rete
•In particolare
−http e https
−Architettura clientserver
−Modelli dei servizi
•Apprendere i concetti
legati ai protocolli
attraverso l’esame a
livello applicativo di
quelli più popolari
4 Ottobre 2005
Stefano Clemente
5
Applicazioni e protocolli a
livello applicazione
•Applicazioni: comunicazione application
transport
network
tra processi distribuiti
data link
− eseguite nello spazio utente
degli “host” della rete
− implementate attraverso lo
scambio di messaggi
− esempi:e-mail, ftp, Web
physical
•Protocolli a livello
applicazione
− parte di un’applicazione
− definiscono i messaggi
scambiati tra le applicazioni e
le azioni intraprese
− usano i servizi di
comunicazione forniti dai livelli
inferiori (TCP, UDP)
4 Ottobre 2005
Stefano Clemente
application
transport
network
data link
physical
application
transport
network
data link
physical
6
Applicazioni di rete
• Processo: programma
eseguito su un host
− Sullo stesso host i processi
comunicano tra di essi
attraverso meccanismi di
interprocess communication
definiti dal sistema
operativo
− Processi in esecuzione su
host differenti comunicano
attraverso i protocolli a
livello applicazione
4 Ottobre 2005
•user agent:
processo software che
si interfaccia verso
l’alto con l’utente e
verso il basso con la
rete
− Mette in atto i protocolli a
livello applicazione
− Web: browser
− E-mail: client mail
− streaming audio/video:
media player
Stefano Clemente
7
Architettura Client-Server
• Una tipica rete si compone
di client e di server
• Client
application
transport
network
data link
physical
− È il primo a parlare aprendo una
comunicazione con il server
− Solitamente richiede servizi
• Web: il client è il browser
• e-mail: il client è il mail reader
• Server
− Soddisfa la richiesta di servizi dei
client
• Web server inviano le pagine
Web richieste
• i mail server spediscono le e-mail
4 Ottobre 2005
Stefano Clemente
richiesta
risposta
application
transport
network
data link
physical
8
I protocolli a livello applicazione
• API: Application
Programming
Interface
− Interfaccia le
applicazioni con il livello
di trasporto
• Come fa un processo
a identificare il
processo remoto con
il quale deve
comunicare?
− Socket: Internet API
− Indirizzo IP dell’host
remoto sul quale è in
esecuzione l’altro processo
− Due processi
comunicano inviando
dati al socket e leggendo
dati dal socket
− “port number” – permette
all’host remoto di
identificare il processo tra
quelli che sta eseguendo
4 Ottobre 2005
Stefano Clemente
9
Parametri dei servizi di trasporto
valutabili per le applicazioni
• Data loss
− Alcune applicazioni (es.
streaming audio)
possono tollerare alcune
perdite
− altre (es. file transfer,
telnet) richiedono una
affidabilità del 100% nel
trasferimento dei dati
• Bandwidth
− Alcune applicazioni (es.
multimedia) richiedono
poca banda per funzionare
− altre (dette “elastic apps”)
usano tutta la banda della
quale possono disporre
• Timing
− Alcune applicazioni (es.
VOIP) richiedono bassi
ritardi per essere efficaci
4 Ottobre 2005
Stefano Clemente
10
Requisiti dei servizi di trasporto
per le applicazioni più comuni
Applicazione
Data loss
Bandwidth
Timing
File transfer
Nessuna
Elastica
No
E-mail
Nessuna
Elastica
No
Web
Tollerata
Elastica
No
Tollerata
audio: 5Kb-1Mb
video:10Kb5Mb
Si, 100 msec
audio/video
differiti
Tollerata
audio: 5Kb-1Mb
video:10Kb5Mb
Si, pochi
secondi
Applicazioni
Finanziarie
Nessuna
Elastica
Si/No
audio/video
real-time
4 Ottobre 2005
Stefano Clemente
11
Servizi dei protocolli di trasporto
Internet
• TCP (Trasmission Control
Protocol)
− connection-oriented: setup
richiesto tra client e server
− Trasporto affidabile tra
processi trasmittenti e
riceventi
− Flow control: il trasmittente
non può sommergere il
ricevente
− congestion control: rallenta
il trasmittente quando la
rete è sovraccarica
− Non fornisce
• UDP (User Datagram
Protocol)
− Trasmissioni dati tra
trasmittente e ricevente
non affidabile
− Non fornisce:
• Timing
• Banda minima garantita
4 Ottobre 2005
Stefano Clemente
•
•
•
•
•
•
connection setup
reliability
flow control
congestion control
Timing
Garanzie di banda
12
Programmazione dei Socket
Come avviene la comunicazione
client/server per mezzo dei socket
• Socket API
• Introdotta nella versione
BSD 4.1 UNIX nel 1981
• Creata esplicitamente,
usata e rilasciata dalle
applicazioni
• Modello client/server
• Due tipi di servizio di
trasporto attraverso le
socket API:
− unreliable datagram
− reliable, byte streamoriented
4 Ottobre 2005
Stefano Clemente
socket
interfaccia locale all’host
(una “porta”), creata
dall’applicazione e di sua
proprietà,
controllata dal sistema
operativo, attraverso la
quale i processi
applicativi possono sia
inviare sia ricevere
messaggi a/da un altro
processo applicativo
(remoto o locale)
13
Programmazione dei Socket
usando il TCP
• Socket: porta tra processi applicazione e la
parte terminale del protocollo di trasporto
• Servizio TCP: trasferimento affidabile di byte
tra due processi
controllato dallo
sviluppatore
dell’applicazione
controllato dal
sistema
operativo
processo
processo
socket
TCP con
buffer e
variabili
internet
controllato dal
sistema
operativo
host o
server
host o
server
4 Ottobre 2005
socket
TCP con
buffer e
variabili
controllato dallo
sviluppatore
dell’applicazione
Stefano Clemente
14
Programmazione dei Socket
usando il TCP
• Il client deve
contattare il server
− Il processo server deve già
essere in esecuzione
− Il server deve aver creato il
socket (porta) che accoglie
il tentativo di contatto del
client
− Quando il client crea un
socket: il TCP del client si
connette al TCP del server
− Una volta contattato dal
client, il TCP del server crea
un nuovo socket con il quale
il processo server comunica
con il client
• Il client contatta il
server
− creando un socket TCP
locale al client
− specificando l’indirizzo IP e
il numero della porta del
processo server
4 Ottobre 2005
Stefano Clemente
• Un server può parlare con
più client
Dal punto di vista
dell’applicazione
Il TCP fornisce un trasferimento di
byte affidabile e ordinato (“pipe”)
tra client e server
15
Programmazione dei Socket
usando il TCP
trastiera
Processo
Client
stream di input:
sequenza di byte
inviata al
processo
socket TCP
del client
alla rete
4 Ottobre 2005
Stefano Clemente
inFromServer
stream di output:
sequenza di byte
inviata dal processo
outToServer
− Il client legge una riga da
standard input (inFromUser
stream)e la invia al server
via socket (outToServer
stream)
− Il server legge una riga dal
socket
− Il server converte la riga in
maiuscolo e la rimanda al
client
− Il client legge dal socket
(inFromServer stream) e
stampa la riga modificata
inFromUser
• Esempio di applicazione
client/server:
monitor
TCP
socket
dalla rete
16
Interazione tra i socket client e
server: TCP
Server (su hostid)
Client
Crea il socket sulla
porta x per le richieste
in ingresso:
welcomeSocket = ServerSocket()
attende l’arrivo delle
richieste di connessione
TCP
connection setup
crea il socket connettendosi
all’hostid sulla porta x
clientSocket = Socket()
connectionSocket = welcomeSocket.accept()
Invia una richiesta usando
clientSocket
legge le richieste da
connectionSocket
legge la risposta da
clientSocket
scrive le risposte a
connectionSocket
chiude clientSocket
4 Ottobre 2005
Stefano Clemente
17
Programmazione dei Socket
usando UDP
• nessuna “connessione” tra
client e server
− non c’è handshaking
− chi invia attacca al pacchetto
in modo esplicito l’indirizzo IP
e la porta del destinatario
− il server si fa carico
dell’estrazione dell’indirizzo IP
e della porta del mittente dal
datagram ricevuto
• i dati trasmessi possono
essere ricevuti in qualsiasi
ordine o smarriti
Dal punto di vista
dell’applicazione
UDP trasferisce gruppi di byte
(“datagram”) tra client e
server in modo non affidabile
4 Ottobre 2005
Stefano Clemente
18
Interazione tra i socket client e
server: UDP
Server (su hostid)
Client
Crea il socket sulla
porta x per le richieste
in ingresso:
ServerSocket =DatagramSocket()
crea il socket
clientSocket = DatagramSocket()
Crea la coppia indirizzo (hostid, porta=x)
e invia la richiesta di datagram con
clientSocket
legge le richieste da
ServerSocket
scrive le risposte a
ServerSocket
specificando l’indirizzo del client
e la porta
legge la risposta da
clientSocket
chiude clientSocket
4 Ottobre 2005
Stefano Clemente
19
tastiera
stream
di Input
Processo
Client
monitor
inFromUser
Input: riceve
pacchetti (il TCP
riceve “byte
stream”)
pacchetto
UDP
sendPacket
Output: invia
pacchetti (il TCP
invia “byte
stream”)
receivePacket
Client (UDP)
pacchetto
UDP
Socket del Client
socket
UDP
alla rete
4 Ottobre 2005
dalla rete
Stefano Clemente
20
Il Protocollo HTTP: Hypertext
Transfer Protocol 1.1
Stefano Clemente
[email protected]
© 2005 Stefano Clemente
Riferimenti bibliografici
• Internet Official Protocol Standards
(STD 1)
− Request For Comments (RFC):
• 2616 (HTTP)
− Cercare con Google “RFC 2616”
4 Ottobre 2005
Stefano Clemente
22
Introduzione
• Hypertext Transfer Protocol (HTTP) è un protocollo a
livello applicazione per sistemi informativi
− distribuiti
− collaborativi
− hypermedia
• Storia del protocollo
− HTTP/0.9 – Trasferimento di righe di dati su internet
− HTTP/1.0 – Messaggi MIME-like contenenti metainformazioni
sui dati trasferiti e modificatori sulla semantica delle richieste
o risposte
• non prendeva in considerazione le cache, i proxy gerarchici, le
connessioni persistenti, gli host virtuali
− HTTP/1.1 – …
4 Ottobre 2005
Stefano Clemente
23
MIME: Multipurpose Internet Mail
Extensions
• RFC 2045, 2046
• Delle righe addizionali nell’intestazione del
messaggio definiscono il tipo dei contenuti del
MIME
versione MIME
metodo utilizzato per
la codifica
tipo del contenuto
tipo/sottotipo
dichiarazione dei parametri
From: [email protected]
To: [email protected]
Subject: Picture of yummy crepe.
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data
dati codificati
4 Ottobre 2005
Stefano Clemente
24
MIME: Multipurpose Internet Mail
Extensions
Tipi del MIME
Content-Type: type/subtype; parameters
• Text
• Video
− sottotipi di esempio
− sottotipi di esempio
• mpeg
• quicktime
• plain
• html
• Image
• Application
− sottotipi di esempio
− dati non interpretati che
sono riservati
all’elaborazione da parte di
un’applicazione
− sottotipi di esempio
• jpeg
• gif
• Audio
− sottotipi di esempio
• basic (8-bit mu-law
encoded),
• 32kadpcm (32 kbps coding)
4 Ottobre 2005
• msword
− octet-stream
Stefano Clemente
25
MIME: Multipurpose Internet Mail
Extensions
Multipart Type
From: [email protected]
To: [email protected]
Subject: Picture of yummy crepe.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=98766789
--98766789
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain
Dear Bob,
Please find a picture of a crepe.
--98766789
Content-Transfer-Encoding: base64
Content-Type: image/jpeg
base64 encoded data .....
.........................
......base64 encoded data
--98766789--
4 Ottobre 2005
Stefano Clemente
26
Il modello HTTP
• È un protocollo richiesta-risposta
− Il client invia una richiesta nella forma di
• metodo di richiesta – URI (Uniform Resource Identifier) –
versione del protocollo
• messaggio tipo MIME contente modificatori della richiesta,
informazioni sul client e un probabile corpo del messaggio
− Il server risponde con
• una riga di stato contenente un codice e la versione del
protocollo
• messaggio tipo MIME contente informazioni sul server,
metainformazioni sull’entità (entity – l’oggetto della
richiesta) e, se possibile, l’oggetto della risposta
4 Ottobre 2005
Stefano Clemente
27
Il modello HTTP
• La maggior parte delle comunicazioni
HTTP vengono avviate da uno User
Agent (UA) e consistono in una richiesta
indirizzata a un Origin Server (OS)
UA
OS
• CASO 1 – connessione singola
4 Ottobre 2005
Stefano Clemente
28
Il modello HTTP
• CASO 2 – Connessione attraverso intermediari
A
UA
B
C
OS
− intermediari – ognuno può gestire più richieste/risposte
contemporaneamente
• PROXY – Agente di inoltro
− riceve richieste per un URI
− riscrive una parte o l’intero messaggio
− inoltra la richiesta riformattata verso il server identificato
dall’URI
• GATEWAY – Agente di ricezione
− agisce come uno strato al di sopra dei server e, se necessario,
traduce la richiesta nel protocollo del server sottostante
• TUNNEL
− agisce come un punto di passaggio tra due connessioni e non
cambia in alcun modo il messaggio (es. firewall)
4 Ottobre 2005
Stefano Clemente
29
Il modello HTTP
• CASO2 – Connessione attraverso intermediari (2)
UA
A
B
C
OS
− Gli intermediari che non agiscono da tunnel possono avvalersi
di una cache interna con l’effetto di accorciare la catena
richieste/risposte verso un OS se esiste in cache una copia
della risposta applicabile alla particolare richiesta
• in questo modo si ottimizza l’uso della banda, si velocizza la
risposta in modo da tutelare i dispositivi con più difficoltà di
connessione (es. PDA)
• HTTP è solitamente utilizzato su TCP/IP e per default
usa la porta 80
4 Ottobre 2005
Stefano Clemente
30
I messaggi HTTP
• Tipi di messaggio
− I messaggi HTTP consistono in
• richieste dal client al server
• risposte dal server al client
− Entrambi sono formati da
•
•
•
•
4 Ottobre 2005
una riga iniziale
zero o più header field (intestazioni)
una riga vuota per indicare la fine delle intestazioni
il corpo del messaggio (opzionale)
Stefano Clemente
31
I messaggi HTTP
Richiesta
Risposta
4 Ottobre 2005
riga di stato
HTTP/1.0 200 OK
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
righe header
DATI ...
dati (es. file html)
Stefano Clemente
32
I messaggi HTTP
• Header
− Le intestazioni sono suddivise in più righe ognuna
della forma
• nome-header: valore
• nome-header è case insensitive
− L’ordine in cui appaiono non ha nessuna importanza
• è comunque buona pratica disporle nel seguente ordine
− intestazioni generali
− intestazioni relative alla richiesta/risposta
− intestazioni relative all’entità
− POSSONO comparire più righe con lo stesso nomeheader se e solo se per quell’intestazione è
possibile fornire valori in un elenco separato da
virgole
nome-header: valore1
nome-header: valoren
4 Ottobre 2005
nome-header: valore1, …, valoren
Stefano Clemente
33
I messaggi HTTP
• Corpo
− è opzionale
− contiene l’entità oggetto della richiesta/risposta
− <corpo_messaggio>  <corpo_entità> solo quando è
stato applicato un meccanismo di codifica
(specificato con header “Transfer-Encoding”)
• la codifica è applicata da un’applicazione per garantire il
trasporto sicuro e esatto del messaggio per cui è una
proprietà dell’intero messaggio e non dell’entità
− nel caso di richieste
• la presenza di un corpo è segnalata dagli header
“Content-Length” o “Transfer-Encoding”
• NON DEVE essere incluso nelle richieste il cui metodo non
lo consente (es. HEAD)
4 Ottobre 2005
Stefano Clemente
34
I messaggi HTTP
− nel caso di risposte
• la presenza di un corpo dipende sia dal metodo
della richiesta, sia dal codice di stato della
risposta
• NON DEVE essere incluso un messaggio
− nelle risposte alle richieste con metodo HEAD
− nei codici di stato 1xx (informational), 204 (no
content), 304 (not modified)
• tutte le altre risposte includono un corpo anche
se POTREBBE essere di lunghezza zero
4 Ottobre 2005
Stefano Clemente
35
I messaggi HTTP
• Lunghezza del messaggio
− È la lunghezza di trasferimento del messaggio, cioè
la lunghezza del corpo così come appare nel
messaggio (es. codifica inclusa)
− Header Content-Lenght
− Quando in un messaggio che ammette un corpo è
fornita anche la lunghezza, il valore di questa
DEVE corrispondere esattamente al numero di
ottetti del messaggio
• gli UA HTTP/1.1 DEVONO notificare all’utente quando
questa condizione non è verificata
4 Ottobre 2005
Stefano Clemente
36
I messaggi HTTP
• Header generali
− Sono intestazioni applicabili sia alle richieste
che alle risposte, ma non alle entità
• Cache-Control, Connection, Date, Pragma,
Trailer, Transfer-Encoding, Upgrade, Via, Warning
• Header non riconosciuti sono considerati header
dell’entità
4 Ottobre 2005
Stefano Clemente
37
Richieste
• Un messaggio di richiesta riporta nella prima riga (detta Request-Line) il
metodo da applicare alla risorsa, l’identificatore della risorsa e la
versione di HTTP utilizzata
<metodo> <URI> HTTP/<major>.<minor>
• Metodo
− indica l’azione da eseguire sulla risorsa identificata dallo URI
− è case-sensitive
• OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
− si possono specificare i metodi ammessi da una risorsa attraverso l’header
“Allow”
− la risposta notifica sempre se è consentito l’uso del metodo sulla risorsa
indicata
• il server
DOVREBBE restituire i codici
− 405 (Method Not Allowed) se il metodo è implementato, ma non utilizzabile sulla risorsa
− 501 (Not Implemented) se il metodo non è riconosciuto
− i metodi
DEVONO essere supportati
gli altri sono opzionali, ma DEVONO rispettare sempre la semantica imposta dal
• GET e HEAD
•
4 Ottobre 2005
protocollo HTTP
Stefano Clemente
38
Richieste
• URI della richiesta
− identifica la risorsa alla quale si applica il metodo
− può essere
• *
− indica che la richiesta non va applicata ad una risorsa, ma al server
OPTIONS * HTTP/1.1
• URI assoluta
− è OBBLIGATORIA quando la richiesta viene fatta a un Proxy
GET http://www.ei.unibo.it/ HTTP/1.1
− DEVE essere accettata da tutti i server HTTP/1.1 per le future versioni di
HTTP anche se attualmente generata solo dai client che si collegano ai Proxy
• path assoluto
− è la forma più comune e prevede la trasmissione nella Request-Line del path
assoluto e la trasmissione di un header “Host” contenente l’indirizzo
GET / HTTP/1.1
Host: www.ei.unibo.it
• authority
− utilizzata solo dal metodo CONNECT
4 Ottobre 2005
Stefano Clemente
39
Richieste
• La risorsa identificata dalla richiesta
− è determinata dal path assoluto e dall’header
“Host”
• se un host non permette la differenziazione delle richieste
in base all’host, POTREBBE ignorare l’header “Host”
• se un host permette la differenziazione delle richieste in
base all’host, DEVE determinare la risorsa secondo le
regole seguenti
− se c’è un URI assoluto, DEVE ignorare gli header “Host”
− se non c’è un URI assoluto, l’host è ricavato dall’header
“Host”
− se le prime due non regole non sono applicabili DEVE
rispondere
400 (Bad Request)
4 Ottobre 2005
Stefano Clemente
40
Richieste
• Header
− permettono al client di fornire ulteriori
informazioni circa la richiesta (sono una sorta di
modificatori della richiesta)
•
•
•
•
•
•
•
•
•
4 Ottobre 2005
Accept
Accept-Charset
Accept-Encoding
Authorization
Expect
From
Host
If-Match
If-Modified-Since
•
•
•
•
•
•
•
•
•
Stefano Clemente
If-None-Match
If-Range
If-Unmodified-Since
Max-Forwards
Proxy-Authorization
Range
Referer
TE
User-Agent
41
Metodi delle richieste HTTP
• OPTIONS
− Rappresenta una richiesta di informazioni riguardanti le
opzioni di comunicazione disponibili sulla catena di
richieste/risposte identificata dalla URI
− Permette al client di
• determinare le opzioni e/o I requisiti associati ad una risorsa
• le capacità di un server
senza azioni su risorse o ricerca di risorse
− Le risposte non sono soggette a cache
− Se la URI richiesta
• è un asterisco ("*"), la richiesta si intende applicata al server
piuttosto che a una risorsa specifica
− la comunicazione con il server dipende tipicamente dalla risorsa per
cui in genere serve come no-op; in pratica no fa altro che restituire
le caratteristiche del server (es. il client testa se il proxy è HTTP 1.1)
• non è un asterisco, la richiesta OPTIONS applica le opzioni
disponibili nella comunicazione con la risorsa
4 Ottobre 2005
Stefano Clemente
42
Metodi delle richieste HTTP
• GET
− Recupera le informazioni specificate dalla URI di richiesta.
• Se la URI di richiesta si riferisce a un processo di creazione dati
(es. pagine dinamiche), è il risultato di detto processo che deve
essere restituito come risposta e non la sorgente del processo
− La risposta può essere memorizzata in cache
• HEAD
− Identico al GET tranne per il fatto che il server non deve
restituire il corpo del messaggio nella risposta, mentre le
metainformazioni devono essere identiche a quelle che
restituirebbe il GET
• per il fatto che non restituisce il corpo è utile per verificare link,
accesibilità e modifiche alle pagine
− La risposta può essere messa in cache
4 Ottobre 2005
Stefano Clemente
43
Metodi delle richieste HTTP
• POST
− È usato per richiedere che il server accetti l’entità inclusa nella richiesta come
subordinata alla risorsa identificata dalla URI
− POST è concepito per fornire un metodo uniforme per le seguenti funzioni:
•
•
•
•
Prendere nota delle risorse esistenti
Inserire un messaggio in un bollettino, newsgroup, ecc.
Fornire dati a un processo per la gestione dei dati
Estendere un database attraverso una append
il modo in cui la funzione è eseguita dipende dal server
− L’azione eseguita dalla POST potrebbe non restituire una risorsa identificata
da una URI e in questo caso lo stato della risposta deve essere 200 (OK)
oppure 204 (No Content), a seconda del fatto che la risposta includa o meno
un’entità che descriva il risultato
− Se è stata creata una risorsa sul server di origine la risposta dovrebbe
essere 201 (Created) e contenere un’entità che descriva lo stato della
richiesta e il riferimento alla nuova risorsa
− Le risposte non sono soggette a cache a meno che esse non includano
appropriati Cache-Control o intestazioni Expires. In quest’ultimo caso la
risposta 303 (See Other) può essere usata per indirizzare lo user agent a
reperire la risposta in cache
4 Ottobre 2005
Stefano Clemente
44
Metodi delle richieste HTTP
•
PUT
−
Richiede che l’entità enclusa sia memorizzata sotto l’URI di richiesta fornita.
−
La differenza con la POST sta nel diverso significato della URI di richiesta
−
HTTP/1.1 non specifica in che modo la PUT incide sullo stato del server
−
A meno di atre specifiche, le intestazioni dell’entità nella richiesta dovrebbero essere
applicate alla risorsa creata o modificata dalla PUT
• Se l’URI di richiesta fa riferimento a una risorsa già esistente, l’entità inclusa dovrebbe essere
considerata come una versione modificata di quella esistente sul server di origine. In questo caso
dovrebbe essere risposto 200 (OK) o 204 (No Content) per indicare il completamento con
successo
• Se la URI di richiesta non punta a una risorsa esistente e quindi può essere definita come una
nuova risorsa dall’utente richiedente, il server di origine può creare la risorsa con quella URI. In
questo caso il server di origine deve informare lo user agent attraverso la risposta 201 (Created).
• Nel caso in cui la risorsa non possa essere nè creata nè modificata il server di origine dovrebbe
rispondere con un messaggio appropriato che indichi la natura del problema
• Il recipiente dell’entità non deve ignorare nessuna intestazione di tipo Content che non capisca o
implementi e deve rispondere con 501 (Not Implemented)
• Lo user agent conosce l’URI e il server non deve applicare la stessa URI ad altre risorse; se il
server desidera che la richiesta venga applicata a un altra URI, deve inviare una risposta 301
(Moved Permanently), e lo user agent può sceglierese rinviare o meno la richiesta
• nel caso di POST la URI identifica la risorsa che gestirà l’entità inclusa
• la URI nella richiesta PUT identifica l’entità inclusa con la richiesta stessa
4 Ottobre 2005
Stefano Clemente
45
Metodi delle richieste HTTP
• DELETE
− Richiede la cancellazione dal server di origine della risorsa
identificata dalla URI di richiesta. Questo metodo può essere
modificato dall’intervento umano o da altro e il client non ha
alcuna garanzia che l’operazione sia stata portata a termine,
anche se il codice della risposta restituita dal server afferma
che l’operazione è andata a buon fine. Il server non
dovrebbe fornire risposte di successo a meno che nel
momento in cui fornisce una tale risposta non intende
effettivamente eliminare o rendere comunque inaccessibile la
risorsa
− La risposta di successo dovrebbe essere
• 200 (OK) se include un’entità che descrive lo stato
• 202 (Accepted) se l’azione non è stata ancora attivata
• 204 (No Content) se l’azione è stata attivata, ma non c’è
un’entità inclusa nella risposta
− Le risposte a DELETE non sono soggette a cache
4 Ottobre 2005
Stefano Clemente
46
Metodi delle richieste HTTP
• TRACE
− Attraverso questo metodo un client può vedere cosa viene
ricevuto dall’altra parte della catena delle richieste in modo
tale da eseguire delle diagnosi
− La richiesta TRACE non deve includere un corpo
− Se la richiesta è valida la risposta dovrebbe contenere una
risposta 200 (OK) e l’intero messaggio di richiesta nel corpo
dell’entità con Content-Type "message/http“
− Le risposte non dovrebbero essere soggette a cache.
• CONNECT
− Usata con i proxy per tunnel (es. SSL)
4 Ottobre 2005
Stefano Clemente
47
Metodi delle richieste HTTP
• Metodi di richiesta HTTP
− GET
• richiesta di un documento al Web Server
− POST
• invio dei dati che l’utente del client ha immesso nella form
• GET può inviare contenuti di una form come parte della URL per
recuperare una particolare risorsa dal server web
− http://www.google.it/advanced_search?hl=it
in cui la parte seguente il punto interrogativo (nella forma
<query>=<query_utente>) rappresenta la query dell’utente
− In una GET la lunghezza massima di <query_utente> è di 1024
caratteri; se eccede questo limite si usa il metodo POST
• POST è usata anche per modificare i contenuti del web server
(es. forum)
• I browser solitamente fanno cache delle pagine web per
velocizzare l’accesso a queste in caso debbano essere ricaricate
− non vengono messe in cache le pagine relative a richieste POST
− vengono messe in cache le pagine relative a richieste GET
4 Ottobre 2005
Stefano Clemente
48
Risposte
• Dopo avere ricevuto e interpretato un
messaggio il server risponde con un
messaggio formato da una riga di stato
(Status-Line), degli header e un
eventuale corpo del messaggio
4 Ottobre 2005
Stefano Clemente
49
Risposte
• Status-Line
− è la prima riga del messaggio di risposta ed è formata dalla versione del
protocollo, codice numerico dello stato e descrizione dello stato, tutti separati
da uno spazio, e con un <CRLF> alla fine
<versione_HTTP> <xyz> <descrizione>
− il codice di stato è un codice di tre cifre che codifica il risultato del tentativo di
soddisfare la richiesta, mentre la descrizione dà una breve spiegazione circa il
codice
• il codice è destinato alle procedure automatiche
• la descrizione all’utente la prima cifra del codice definisce la classe della risposta,
mentre le altre due non hanno un ruolo ben codificato
• 1xx – Informational, è stata ricevuta la richiesta e l’elaborazione prosegue
• 2xx – Success, l’azione è stata completata con successo
• 3xx – Redirection, per completare la richiesta sono necessarie ulteriori azioni
• 4xx – Client Error, la richiesta non è ben formulata
• 5xx – Server Error, il server non riesce a soddisfare una richiesta apparentemente
valida
− le applicazioni non sono obbligate a riconoscere tutti i codici, ma devono
comprendere almeno la classe codificata dalla prima cifra
• ogni risposta non codificata dall’applicazione deve essere ricondotta a x00
4 Ottobre 2005
Stefano Clemente
50
Risposte
• Header della risposta
− sono utilizzati dal server per fornire informazioni
addizionali riguardanti la risposta e che non
possono essere passati con la Status-Line
•
•
•
•
•
•
•
•
•
4 Ottobre 2005
Accept-Ranges
Age
ETag
Location
Proxy-Authenticate
Retry-After
Server
Vary
WWW-Authenticate
Stefano Clemente
51
Entity
• Le richieste e le risposte possono trasmettere un’entità
− entity header field
− entity body
• Entity Header Field
− definiscono meta-informazioni sul corpo dell’entità oppure, se non
c’è un’entità, sulla risorsa
•
•
•
•
•
•
•
•
•
•
•
4 Ottobre 2005
Allow
Content-Encoding
Content-Language
Content-Length
Content-Location
Content-MD5
Content-Range
Content-Type
Expires
Last-Modified
extension-header  informazioni addizionali
Stefano Clemente
52
Entity
• Corpo
− è nel formato di codifica definito dall’header dell’entità
− è ottenuto dalla decodifica del messaggio
• Tipo
− il tipo dei dati dell’entità è definito dagli header Content-Type
e Content-Encoding
• Content-Type specifica il formato dei dati
− Content-Type: image/gif
• Content-Encoding serve per indicare delle codifiche ulteriori sui
dati, per esempio per compressione, e che sono una proprietà
della risorsa richiesta
− Content-Encoding: gzip
• Lunghezza
− lunghezza del corpo del messaggio prima dell’applicazione
delle codifiche per il trasferimento
4 Ottobre 2005
Stefano Clemente
53
Le connessioni
• Connessioni persistenti
− prima che venissero implementate occorreva una connessione per
ogni richiesta/risposta con problemi di crescita del carico per i server
HTTP e aumento del traffico su rete
− ci sono applicazioni che fanno richieste multiple allo stesso server in
brevi tempi
− vantaggi
• l’apertura di poche connessioni permette ai router e agli stessi host di
risparmiare memoria e tempo di CPU
• le richieste e le risposte possono essere sovrapposte sulla stessa
connessione per cui un client può fare delle richieste multiple senza
preoccuparsi di attendere per ognuna di esse la relativa risposta
• il traffico sulla rete viene ridotto eliminando i numerosi pacchetti
provocati dall’apertura delle connessioni
• si riducono i tempi di latenza in seguito alle richieste, dovuti
principalmente agli handshake conseguenti all’apertura delle connessioni
− Le implementazioni HTTP DOVREBBERO disporre di connessioni
persistenti
4 Ottobre 2005
Stefano Clemente
54
Le connessioni:
Visione generale
• Le connessioni persistenti sono il
comportamento di default nelle connessioni:
il client DOVREBBE assumere che il server
resterà connesso anche in caso di errori
• La chiusura della connessione viene
segnalata attraverso l’header
− Connection: close
dopodiché il client NON DEVE inviare più
richieste
4 Ottobre 2005
Stefano Clemente
55
Le connessioni:
Visione generale
Negoziazione
− Un server HTTP/1.1 POTREBBE assumere che il client
HTTP/1.1 vuole mantenere una connessione persistente fino a
quando non invia l’header “Connection: close” in una
richiesta, in questo caso se il server decide di chiudere subito
dopo l’invio della risposta deve inserire lo stesso header nella
risposta
− Un client HTTP/1.1 POTREBBE aspettarsi che la connessione
rimanga aperta, ma decide il da farsi in base alla presenza o
meno di un header “Connection: close” nella risposta del
server. Se però decidesse di non mantenere aperta la
connessione DOVREBBE inviare lo stesso header in una
richiesta
− La richiesta o la risposta con l’header di chiusura è l’ultima
azione sulla connessione
− Per le versioni precedenti di HTTP i client e i server NON
DOVREBBERO assumere la persistenza della connessione
4 Ottobre 2005
Stefano Clemente
56
Le connessioni:
Visione generale
Pipelining
− Pipeline = meccanismo delle richieste multiple
− Un client che supporta la persistenza della connessione
POTREBBE inviare richieste multiple senza attendere per
ognuna la relativa risposta
− Il server DEVE rispondere secondo l’ordine di ricezione delle
richieste
− I client che suppongono di poter disporre di connessioni
persistenti e che cominciano l’invio delle richieste multiple
subito dopo la connessione, DOVREBBERO essere pronti a
dover riprovare la connessione se il primo tentativo fallisse
• Se un client riprova, NON DEVE ricominciare il pipeline prima di
essersi accertato della persistenza della connessione
• Il client DEVE essere pronto a ripetere le richieste se il server
chiude la connessione prima di aver inviato tutte le risposte
4 Ottobre 2005
Stefano Clemente
57
HTTP è stateless
• Stateful e stateless sono aggettivi che
descrivono la capacità o l’incapacità di un
computer o di un programma di annotare e
ricordare uno o più eventi in una sequenza di
interazioni con un utente, un altro computer,
un programma, un dispositivo o qualunque
altro elemento estraneo
− Stateful significa che il computer o il programma
tiene traccia dello stato delle interazioni in genere
mantenendo dei valori in porzioni di memoria
dedicate
− Stateless significa che non viene tenuta nessuna
traccia e ogni interazione viene eseguita soltanto in
base alle informazioni che arrivano con la richiesta
4 Ottobre 2005
Stefano Clemente
58
HTTP è stateless
• Stateful e stateless provengono dall’uso del
termine state per descrivere l‘insieme delle
condizioni a un dato istante
− i computer sono intrinsecamente stateful nelle
loro operazioni per cui questi termini sono riferiti
non alla loro normale operatività, ma a particolari
interazioni
• L’Internet Protocol (IP), è esempio di
interazione stateless
− Ogni pacchetto viaggia per conto proprio senza
riferimento agli altri pacchetti. Per Esempio quando
viene richiesta una pagina web, questa arriva
spezzata in più pacchetti, successivamente
ricomposti dal TCP solo con le informazioni
contenute negli stessi.
4 Ottobre 2005
Stefano Clemente
59
HTTP è stateless
• HTTP è stateless. A ogni richiesta segue la relativa
risposta del server, ma il server non ricorda le
richieste ricevute. Ogni comunicazione è fine a sé
stessa e senza relazioni con quelle precedenti o
successive
• Per rendere HTTP stateful, lo sviluppatore del sito
deve dotare il server di un programma che consenta
la registrazione e il recupero delle informazioni di
stato
• I browser sfruttano una zona su disco per
memorizzare e recuperare le informazioni di stato
− COOKIE
• I server usano le variabili di sessione
4 Ottobre 2005
Stefano Clemente
60
Il Protocollo HTTPS:
HTTP Over TLS
Stefano Clemente
[email protected]
© 2005 Stefano Clemente
Riferimenti bibliografici
• Internet Official Protocol Standards
(STD 1)
− Request For Comments (RFC):
• 2818 (HTTPS)
• 2246 (TLS)
− Cercare con Google “RFC 2818”, “RFC
2246”,
4 Ottobre 2005
Stefano Clemente
62
Introduzione
• HTTP trasmette dati non criptati, quindi
potenzialmente visibili
• L’uso di HTTP per applicazioni contenenti
dati sensibili (es. e-commerce) ha
portato all’adozione di misure di
sicurezza
4 Ottobre 2005
Stefano Clemente
63
Introduzione
• Prima SSL (Secure Socket Layer) e poi il
successore TLS (Transport Layer
Security ) sono stati disegnati
appositamente per fornire sicurezza sul
canale di comunicazione
• HTTPS è un’idea molto semplice basata
sull’uso di HTTP sul TLS, allo stesso
modo in cui HTTP usa TCP
4 Ottobre 2005
Stefano Clemente
64
Brevi cenni su TLS (Transport
Layer Security)
• Lo scopo principale del TLS è fornire
protezione e integrità dei dati sui canali
di comunicazione
• Il protocollo è composto da due strati
− TLS Record Protocol
− TLS HandshakeProtocol
4 Ottobre 2005
Stefano Clemente
65
Brevi cenni su TLS (Transport
Layer Security)
• Al livello più basso, sopra il livello del
protocollo di trasporto (es TCP) si pone il TLS
Record Protocol, che fornisce la sicurezza della
connessione con le seguenti proprietà
− Privatezza della connessione
• Dati crittografati con crittografia simmetrica – le chiavi
sono generate unicamente per ogni singola connessione e
la loro negoziazione avviene per opera del protocollo TLS
Handshake Protocol (il Record Protocol può essere usato
anche senza crittografia)
− Affidabilità della connessione
• Il trasporto dei messaggi include il controllo dell’integrità
attraverso la codifica di un MAC (Message Authentication
Code) calcolato attraverso funzioni di hash sicure quali
SHA, MDA, ecc.
4 Ottobre 2005
Stefano Clemente
66
Brevi cenni su TLS (Transport
Layer Security)
• Il TLS Record Protocol viene usato per
incapsulare i protocolli di livello più alto,
tra i quali il TLS Handshake Protocol
• Il TLS Handshake Protocol permette a
client e server di autenticarsi a vicenda
e di negoziare l’algoritmo di crittografia
e le chiavi prima di iniziare la
trasmissione dei dati
4 Ottobre 2005
Stefano Clemente
67
Brevi cenni su TLS (Transport
Layer Security)
• IL TLS Handshake Protocol fornisce la
sicurezza durante lo stabilimento della
connessione attraverso le seguenti proprietà
− L’identità del partner può essere stabilita mediante
l’uso della crittografia a chiavi asimmetriche(questa
autenticazione può essere opzionale ma è
generalmente richiesta per almeno un partner
− La negoziazione del segreto è sicura e nessuno può
ottenere il segreto
− La negoziazione è affidabile e nessuno può
interferire senza che le parti se ne accorgano
• Vantaggio
− L’applicazione è indipendente dal protocollo
4 Ottobre 2005
Stefano Clemente
68
La connessione HTTPS
• L’agente che si comporta come il client
HTTP deve essere anche un client TLS
iniziando la connessione su una porta
specifica del server ed inviando un
messaggio di saluto ClientHello per
avviare l’handshake TLS
• Quando la fase di handshake è conclusa
il client può inviare la prima richiesta
HTTP
4 Ottobre 2005
Stefano Clemente
69
La connessione HTTPS
• Tutto il traffico HTTP deve avvenire nella
forma di dati dell’applicazione TLS
• Il comportamento del protocollo HTTP
deve essere garantito (incluse le
connessioni persistenti)
4 Ottobre 2005
Stefano Clemente
70
La chiusura della connessione
HTTPS
• La connessione deve essere chiusa in
modo sicuro, vale a dire dopo la
richiesta di chiusura, nessun dato deve
transitare sul canale
• Tra i partner DEVE esserci uno scambio
di avvertimenti di chiusura prima di
chiudere la connessione
4 Ottobre 2005
Stefano Clemente
71
La chiusura della connessione
HTTPS
• Dopo aver inviato un segnale di chiusura
un’implementazione TLS PUO’ chiudere
la connessione senza attendere il
segnale dell’altro partner = Incomplete
Close
• Un partner TLS che vede chiudere la
connessione senza aver ricevuto un
segnale di chiusura (= Premature Close)
NON DEVE riutilizzare la sessione
4 Ottobre 2005
Stefano Clemente
72
La chiusura della connessione
HTTPS - il client
• La chiusura deve avvenire dopo lo scambio dei segnali e quindi il
client DEVE considerare un errore la chiusura prematura e i
dati ricevuti come potenzialmente incompleti
− HTTP permette al client di verificare l’incompletezza dei dati
− un client che agisca secondo il principio “preciso quando invia,
tollerante quando riceve” può tollerare la ricezione di dati incompleti
− due casi meritano attenzione
• Nel caso di risposte senza header Content-Length, normalmente è la
chiusura della connessione a indicare la lunghezza del messaggio e la
chiusura prematura non è distinguibile dalla chiusura dovuta ad un
attacco
• Nel caso di risposte contenenti header Content-Length chiuse prima della
lettura di tutti i dati, a causa del fatto che TLS non fornisce metodi di
protezione orientati ai documenti, non si può stabilire se il server ha
sbagliato l’header Content-Length o se la connessione è stata troncata da
un attacco
• Nel caso di chiusura prematura il client DOVREBBE
considerare buoni solo le risposte i cui dati corrispondono al
Content-Length
4 Ottobre 2005
Stefano Clemente
73
La chiusura della connessione
HTTPS - il client
• Nel caso di chiusura incompleta il client
DOVREBBE recuperare con attenzione e
POTREBBE riaprire la sessione chiusa
• Il client DEVE inviare un segnale di chiusura
prima di chiudere la connessione
• Se il client non è più capace di ricevere dati
POTREBBE non attendere il segnale del server
e chiudere la connessione provocando una
chiusura incompleta al server
4 Ottobre 2005
Stefano Clemente
74
La chiusura della connessione
HTTPS - il server
• Un client HTTP può chiudere la connessione quando
crede e il server si gestisce questa situazione
• Un server DOVREBBE essere pronto alla gestione di
una chiusura incompleta
• Nelle implementazioni HTTP che non usano le
connessioni persistenti il server segnala la fine dei
dati chiudendo la connessione. Se si usa il ContentLength il client potrebbe aver già inviato il segnale di
chiusura e aver chiuso la connessione
• I server DEVONO tentare sempre lo scambio di
segnali di chiusura prima di chiudere effettivamente la
connessione
− i server POTREBBERO chiudere la connessione
immediatamente dopo aver segnalato la chiusura, generando
la chiusura incompleta lato client
4 Ottobre 2005
Stefano Clemente
75
La porta HTTPS
• All’inizio della connessione HTTP il server
si aspetta che il client invii una richiesta,
mentre il TLS (e quindi HTTPS) aspetta
di ricevere il segnale ClientHello
• HTTPS deve quindi ascoltare su una
porta diversa dalla 80 di HTTP
• Per default HTTPS usa la porta 443
4 Ottobre 2005
Stefano Clemente
76
URI per HTTPS
• Sono diverse da quelle HTTP
semplicemente per la parte di
identificazione del protocollo, nella quale
“https” rimpiazza “http”
• Esempio
https://www.ei.unibo.it
4 Ottobre 2005
Stefano Clemente
77
Identificazione dei partner:
identità del server
• Una richiesta HTTPS è generata in base a un URI, per
cui il client che la invia conosce il server
• Se l’host specificato in URI è disponibile, il client
DEVE ancora verificare la sua identità dal certificato
che il server invia alla connessione
• Il certificato è rilasciato da una Certification Authority
• Il controllo dell’identità dell’host POTREBBE essere
omesso solo nel caso in cui il client ha già le
informazioni circa la sua identità (es. ha già il
certificato)
4 Ottobre 2005
Stefano Clemente
78
Identificazione dei partner:
identità del server
• Se il certificato non corrisponde all’host in URI
− i client utilizzati da persone DEVONO eseguire una delle
seguenti azioni
• notificare il fatto all’utente
• chiudere la connessione
− le procedure automatiche DEVONO scrivere in appositi file
di log l’evento e DOVREBBERO chiudere la connessione
• Questi tipi di client POSSONO disporre di particolari settaggi
che disabilitano questo comportamento, ma DEVONO
disporre dei settaggi per l’abilitazione
4 Ottobre 2005
Stefano Clemente
79
Identificazione dei partner:
identità del client
• Il server HTTPS non ha nessuna
conoscenza del client coinvolto con la
comunicazione per cui non ha possibilità
di eseguire controlli
− problema insito nel protocollo HTTP
• Se il server ha possibilità di conoscere il
client attraverso altre fonti esterne al
protocollo DOVREBBE eseguire il
controllo dell’identità
4 Ottobre 2005
Stefano Clemente
80
Scarica

Lucidi 2