Uploaded by lamgxoqk

doc1

advertisement
[nascondi]
Libera la cultura. Dona il tuo 5×1000 a Wikimedia Italia. Scrivi
94039910156.
Hypertext Transfer Protocol
Da Wikipedia, l'enciclopedia libera.
Jump to navigationJump to search
Disambiguazione – "HTTP" rimanda qui. Se stai cercando altri significati, vedi HTTP
(disambigua).
In telecomunicazioni e informatica l'HyperText Transfer Protocol (HTTP)
(in italiano: protocollo di trasferimento di un ipertesto) è un protocollo a livello
applicativo usato come principale sistema per
la trasmissione d'informazioni sul web ovvero in un'architettura tipica client-server. Le
specifiche del protocollo sono gestite dal World Wide Web Consortium (W3C).
Un server HTTP generalmente resta in ascolto delle richieste dei client sulla porta 80
usando il protocollo TCP a livello di trasporto.
Indice










1Storia
2Funzionamento
o 2.1Messaggio di richiesta
 2.1.1Riga di richiesta
 2.1.2Gli header della richiesta
o 2.2Messaggio di risposta
 2.2.1Riga di stato
 2.2.2Gli header della risposta
o 2.3Tipo di connessione
3Esempi di messaggi HTTP
o 3.1Richiesta GET e risposta di successo
o 3.2Richiesta GET e risposta di redirezione permanente
o 3.3Richiesta POST e risposta di redirezione temporanea
o 3.4Richieste utili nella versione 1.0
 3.4.1GET / HTTP/1.0
 3.4.2HEAD / HTTP/1.0
4Versioni sicure
5Streaming HTTP
6Note
7Bibliografia
8Voci correlate
9Altri progetti
10Collegamenti esterni
Storia[modifica | modifica wikitesto]
La prima versione dell'HTTP, la 0.9, risale alla fine degli anni 1980 e costituiva, insieme
con il linguaggio HTML e gli URL, il nucleo base del World Wide Web (WWW) global
information initiative sviluppata da Tim Berners-Lee al CERN di Ginevra per la
condivisione delle informazioni tra la comunità dei fisici delle alte energie. Prima di HTTP il
protocollo di riferimento per tali scopi era il più semplice e leggero FTP. La prima versione
effettivamente disponibile del protocollo, la HTTP/1.0, venne implementata dallo stesso
Berners-Lee nel 1991 e proposta come RFC 1945[1] all'ente normatore IETF nel 1996.
Con la diffusione di NCSA Mosaic, un browser grafico di facile uso, il WWW conobbe un
successo crescente e divennero evidenti alcuni limiti della versione 1.0 del protocollo, in
particolare:



l'impossibilità di ospitare più siti web sullo
stesso server (virtual host);
il mancato riuso delle connessioni disponibili;
l'insufficienza dei meccanismi di sicurezza.
Il protocollo venne quindi esteso nella versione HTTP/1.1, presentato come RFC
2068[2] nel 1997 e successivamente aggiornato nel 1999 come descritto dal RFC 2616[3].
La nuova versione del protocollo, HTTP/2, è stata pubblicata nella RFC 7540[4] nel maggio
2015.
Funzionamento[modifica | modifica wikitesto]
L'HTTP è un protocollo che lavora con un'architettura di tipo client/server: il client esegue
una richiesta e il server restituisce la risposta mandata da un altro host. Nell'uso comune il
client corrisponde al browser ed il server la macchina su cui risiede il sito web. Vi sono
quindi due tipi di messaggi HTTP: messaggi richiesta e messaggi risposta.
differisce da altri protocolli di livello 7 come FTP, per il fatto che
le connessioni vengono generalmente chiuse una volta che una particolare richiesta (o
una serie di richieste correlate) è stata soddisfatta. Questo comportamento rende il
protocollo HTTP ideale per il World Wide Web, in cui le pagine molto spesso contengono
dei collegamenti (link) a pagine ospitate da altri server diminuendo così il numero di
connessioni attive limitandole a quelle effettivamente necessarie con aumento quindi di
efficienza (minor carico e occupazione) sia sul client che sul server. Talvolta però pone
problemi agli sviluppatori di contenuti web, perché la natura senza stato (stateless)
della sessione di navigazione costringe ad utilizzare dei metodi alternativi - tipicamente
basati sui cookie - per conservare lo stato dell'utente.
HTTP
Messaggio di richiesta[modifica | modifica wikitesto]
Il messaggio di richiesta è composto di quattro parti:

riga di richiesta (request line);
 sezione header (informazioni aggiuntive);
 riga vuota (CRLF: i 2 caratteri carriage return e line
feed);
 body (corpo del messaggio).
Riga di richiesta[modifica | modifica wikitesto]
La riga di richiesta è composta da metodo, URI e versione del protocollo. Il metodo di
richiesta, per la versione 1.1, può essere uno dei seguenti:


GET
POST







HEAD
PUT
DELETE
PATCH
TRACE
OPTIONS
CONNECT
l'URI, uniform resource identifier (identificatore univoco di risorsa), indica l'oggetto della
richiesta (ad esempio la pagina web che si intende ottenere).
I metodi HTTP più comuni sono GET, HEAD e POST. Il metodo GET è usato per ottenere il
contenuto della risorsa indicata come URI (come può essere il contenuto di una
pagina HTML). HEAD è analogo a GET, ma restituisce solo i campi dell'header, ad esempio
per verificare la data di modifica del file. Una richiesta con metodo HEAD non prevede l'uso
del body.
Il metodo POST è usato di norma per inviare informazioni al server (ad esempio i dati di
un form). In questo caso l'URI indica che cosa si sta inviando e il body ne indica il
contenuto.
Gli header della richiesta[modifica | modifica wikitesto]
Gli header di richiesta più comuni sono:
Host: nome del server a cui si riferisce l'URL. È obbligatorio
nelle richieste conformi HTTP/1.1 perché permette l'uso
dei virtual host basati sui nomi.
User-Agent: identificazione del tipo di client: tipo browser,
produttore, versione...
Cookie: utilizzati dalle applicazioni web per archiviare e
recuperare informazioni a lungo termine sul lato client.
Spesso usati per memorizzare un token di autenticazione
o per tracciare le attività dell'utente.
Messaggio di risposta[modifica | modifica
wikitesto]
Il messaggio di risposta è di tipo testuale ed è
composto da quattro parti:

riga di stato (status-line);
 sezione header;
 riga vuota (CRLF: i 2 caratteri carriage
return e line feed);
 body (contenuto della risposta).
Riga di stato[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: Codici di stato HTTP.
La riga di stato riporta un codice a tre cifre catalogato
nel seguente modo:

1xx: Informational (messaggi informativi)




2xx: Successful (la richiesta è stata
soddisfatta)
3xx: Redirection (non c'è risposta
immediata, ma la richiesta è sensata e viene
detto come ottenere la risposta)
4xx: Client error (la richiesta non può essere
soddisfatta perché sbagliata)
5xx: Server error (la richiesta non può
essere soddisfatta per un problema interno
del server)
I codici di risposta più comuni sono:

200 OK. Il server ha fornito correttamente il
contenuto nella sezione body.
 301 Moved Permanently. La risorsa che
abbiamo richiesto non è raggiungibile
perché è stata spostata in modo
permanente.
 302 Found. La risorsa è raggiungibile con
un altro URI indicato nel header Location. Di
norma i browser eseguono la richiesta
all'URI indicato in modo automatico senza
interazione dell'utente.
 400 Bad Request. La risorsa richiesta non
è comprensibile al server.
 404 Not Found. La risorsa richiesta non è
stata trovata e non se ne conosce
l'ubicazione. Di solito avviene quando l'URI
è stato indicato in modo incorretto, oppure è
stato rimosso il contenuto dal server.
 500 Internal Server Error. Il server non è in
grado di rispondere alla richiesta per un suo
problema interno.
 502 Bad Gateway. Il server web che agisce
come reverse proxy non ha ottenuto una
risposta valida dal server di upstream.
 505 HTTP Version Not Supported. La
versione di http non è supportata.
Gli header della risposta[modifica | modifica wikitesto]
Gli header della risposta più comuni sono:


Server. Indica il tipo e la versione del
server. Può essere visto come l'equivalente
dell'header di richiesta User-Agent
Content-Type. Indica il tipo di contenuto
restituito. La codifica di tali tipi (detti Media
type) è registrata presso
lo IANA (Internet Assigned Number Authorit
y); essi sono detti
tipi MIME (Multimedia Internet Mail Extensio
ns), la cui codifica è descritta nel
documento RFC 1521. Alcuni usuali tipi
MIME incontrati in una risposta HTTP sono:
o text/html Documento HTML
o text/plain Documento di testo
non formattato
o text/xml Documento XML
o image/jpeg Immagine di
formato JPEG
Tipo di connessione[modifica | modifica
wikitesto]
Il client può chiedere al server, nel messaggio di
richiesta, di utilizzare due tipi di comunicazione.
Non persistente
Per ogni richiesta e relativa risposta, viene stabilita una
connessione TCP dedicata.
Persistente
Ogni richiesta e relativa risposta è trasferita utilizzando la
stessa connessione TCP. È il comportamento predefinito
di HTTP 1.1.
Da un lato, le connessioni non persistenti
introducono una latenza aggiuntiva rispetto a
quelle persistenti di almeno 3 Round Trip
Time (RTT). Infatti, al termine di ogni risposta
da parte del server si rendono necessari


1.5 o 2 RTT per la chiusura della
connessione corrente, con la sua
stretta di mano conclusiva a tre o
quattro passaggi di FIN ed ACK
(three- o four-way handshake).
1.5 RTT per l'apertura della nuova
connessione, per i tre passaggi di
SYN e ACK.
D'altro canto, le connessioni persistenti
precludono il parallelismo nelle comunicazioni,
giacché il client che abbia diverse richieste da
inviare allo stesso server è costretto ad
evaderle sequenzialmente, una dopo l'altra. Per
queste ragioni, i browser solitamente sfruttano
le complementarità prestazionali delle due
politiche di comunicazione per massimizzare la
loro efficienza: solitamente aprono con ogni
server diverse connessioni TCP in parallelo, su
cui comunicano con strategia persistente.
Esempi di messaggi
HTTP[modifica | modifica wikitesto]
Seguono esempi di messaggi di richiesta e
risposta HTTP/1.1.
Gli esempi riguardano il recupero di contenuti
su questa enciclopedia web e possono essere
riprodotti - e quindi verificati - sul proprio PC
copiando e incollando il testo con un client TCP
(ad es: telnet it.wikipedia.org 80 nel caso
di URL http://), oppure client TCP con supporto
SSL (ad es: openssl s_client -connect
it.wikipedia.org:443 nel caso di URL
https://).
Ai fini della riproduzione si annota che:


l'unico header obbligatorio nella
richiesta HTTP/1.1 è
l'header Host contenente la parte
host dell'URL (come scritto sopra);
in genere i browser aggiungono
l'header Accept-Encoding per
specificare la possibilità di ricevere la
risposta in formato compresso.
L'header è eliminato per rendere
leggibile la risposta (es: AcceptEncoding: x-gzip, x-deflate,
gzip, deflate, identity );


al termine degli header è obbligatoria
sempre una riga vuota (ossia due "a
capo" consecutivi)
le parti identificate con [...] indicano
le parti omesse
Richiesta GET e risposta di
successo[modifica | modifica wikitesto]
Recupera la risorsa web presente
all'URL https://it.wikipedia.org/wiki/Pagina_princ
ipale
GET /wiki/Pagina_principale HTTP/1.1
Host: it.wikipedia.org
User-Agent: Mozilla/5.0 (compatible;
Konqueror/3.2; Linux) (KHTML, like Gecko)
Accept: text/html, image/jpeg, image/png,
text/*, image/*, */*
Accept-Charset: iso-8859-1, utf-8;q=0.5,
*;q=0.5
Accept-Language: it
Connection: Keep-Alive
Risposta di successo (200 OK):
HTTP/1.1 200 OK
Date: Fri, 22 Feb 2019 10:50:37 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 22208
Connection: keep-alive
Server: mw1215.eqiad.wmnet
Content-language: it
Content-Encoding: gzip
Last-Modified: Fri, 22 Feb 2019 08:46:20
GMT
Age: 20548
Cache-Control: private, s-maxage=0, maxage=0, must-revalidate
Vary: Accept-Encoding,Cookie,Authorization
[...]
<!DOCTYPE html>
<html class="client-nojs" lang="it"
dir="ltr">
<head>
<meta charset="UTF-8"/>
<title>Wikipedia, l'enciclopedia
libera</title>
[...]
</body>
</html>
Richiesta GET e risposta di
redirezione
permanente[modifica | modifica wikitesto]
Qui il client recupera
l'URL http://it.wikipedia.org/wiki/Pagina_princip
ale (differisce dal precedente poiché http
invece di https).
La richiesta rimane la stessa dell'esempio
precedente.
La risposta cambia esponendo un codice di
spostamento permanente (301 Moved
Permanently):
HTTP/1.1 301 Moved Permanently
Date: Wed, 19 Apr 2017 16:50:43 GMT
Server: Varnish
Location:
https://it.wikipedia.org/wiki/Pagina_princ
ipale
Content-Length: 0
Connection: keep-alive
Richiesta POST e risposta di
redirezione
temporanea[modifica | modifica wikitesto]
Questa è una richiesta POST per modificare le
proprie preferenze di Wikipediano con il tema
"Cologne Blue" (la
sottostringa &wpskin=cologneblue nella prima
riga del corpo della richiesta POST)
POST /wiki/Speciale:Preferenze HTTP/1.1
Host: it.wikipedia.org
User-Agent: Mozilla/5.0 (compatible;
Konqueror/3.2; Linux) (KHTML, like Gecko)
Accept: text/html, image/jpeg, image/png,
text/*, image/*, */*
Accept-Charset: iso-8859-1, utf-8;q=0.5,
*;q=0.5
Accept-Language: it
Connection: Keep-Alive
Cache-control:no-cache
Content-length:1291
Content-type:application/x-www-formurlencoded
wplanguage=it&wpgender=unknown&wpnickname=
&wpdisablemail=1&wpskin=cologneblue&wppopu
ps=0&wpdate=default&wpServerTime=1034&wpti
mecorrection=System%7C120&wptimecorrection
other=02%3A00&wpimagesize=2&wpthumbsize=2&
wpmultimediaviewerenable=1&wpunderline=2&wpstubthreshold=0&w
pmath=mathml&wpcompact-languagelinks=1&wpeditfont=default&wpuseeditwarnin
g=1&wpshowtoolbar=1&wpusebetatoolbar=1&wpu
sebetatoolbarcgd=1&wppreviewontop=1&wprcdays=7&wprclimi
t=50&wphidecategorization=1&wpwatchlistday
s=3&wpwllimit=250&wpwatchlisthidecategoriz
ation=1&wpcirrussearch-pref-completionprofile=fuzzy&wpgadgets%5B%5D=HiddenCat&wp
gadgets%5B%5D=OpenStreetMap&wpgadgets%5B%5
D=ReferenceTooltips&wpgadgets%5B%5D=WikiMi
niAtlas&wpgadgets%5B%5D=ExternalSearch&wpe
cho-email-frequency=0&wpecho-emailformat=html&wpechosubscriptions%5B%5D=email-edit-usertalk&wpecho-subscriptions%5B%5D=web-editthank&wpecho-subscriptions%5B%5D=web-flowdiscussion&wpecho-subscriptions%5B%5D=webmention&wpecho-subscriptions%5B%5D=webuser-rights&wpechosubscriptions%5B%5D=email-userrights&wpecho-subscriptions%5B%5D=webreverted&wpecho-subscriptions%5B%5D=webemailuser&wpecho-cross-wikinotifications=1&wpecho-showalert=1&wpEditToken=dc1583a58b9a1293689802
ce0700c46e58f79b12%2B%5C&title=Speciale%3A
Preferenze&wpenotifusertalkpages
Risposta HTTP di redirezione temporanea (302
Found) rimanda alla pagina per il login
HTTP/1.1 302 Found
Date: Wed, 19 Apr 2017 17:21:16 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Server: mw2224.codfw.wmnet
Vary: Accept-Encoding,X-ForwardedProto,Cookie,Authorization
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location:
https://it.wikipedia.org/w/index.php?title
=Speciale:Entra&returnto=Speciale%3APrefer
enze&returntoquery=&warning=prefsnologinte
xt2
Age: 0
Cache-Control: private, s-maxage=0, maxage=0, must-revalidate
Richieste utili nella versione
1.0[modifica | modifica wikitesto]
GET / HTTP/1.0[modifica | modifica wikitesto]
La GET nella versione HTTP/1.0 risulta
comoda per le docenze, si può effettuare con
una sola riga perché nella versione 1.0 del
protocollo non era obbligatorio inserire l'header
"Host:"
Per eseguirla si fa:
GET / HTTP/1.0
Si ricorda di lasciare una riga vuota dopo la
richiesta. Attendere la risposta dal webserver...
HEAD / HTTP/1.0[modifica | modifica wikitesto]
Risulta allo stesso modo molto comodo
effettuare la richiesta HEAD del protocollo che
restituisce le sole intestazioni con:
HEAD / HTTP/1.0
Versioni sicure[modifica | modifica
wikitesto]
Dal momento che tutto il traffico HTTP è
anonimo e in chiaro, sono state sviluppate
diverse alternative per garantire differenti livelli
di sicurezza, in termini di




cifratura del traffico;
verifica di integrità del traffico;
autenticazione del server;
autenticazione dell'utente.
La prima proposta venne direttamente
da NCSA, con le versioni server 1.1 e client 2.2
che supportavano un meccanismo di
autenticazione utente e cifratura dati basati su
messaggi formato PEM e chiavi PGP.
In seguito, sono state standardizzate due
versioni sicure del protocollo HTTP
chiamate SHTTP e HTTPS. La prima,
modellata sulla posta cifrata S/MIME, è ormai
caduta in disuso e prevede meccanismi
crittografici a livello di payload: le richieste e gli
header vengono scambiati in chiaro mentre il
contenuto della pagina viene cifrato come una
struttura MIME multipart. Il meccanismo
HTTPS, inventato da Netscape, usa invece il
sottostante canale cifrato a livello
di trasporto mediante SSL o TLS per impedire
l'intercettazione di qualsiasi parte della
transazione. Entrambi i protocolli possono
garantire l'identità del mittente, ma solo SHTTP
è in grado di garantire anche l'integrità del
contenuto dopo averlo, ad esempio,
memorizzato su un disco.
Streaming HTTP[modifica | modifica
wikitesto]
La fruizione nelle pagine WEB di
materiale multimediale,
quale audio o video viene gestito in modo del
tutto analogo al download dei file, tramite
un caricamento progressivo o distribuzione
progressiva, in cui il file viene scaricato in
modo progressivo dall'inizio alla fine (tramite i
protocolli Real Time Streaming Protocol e Realtime Transport Protocol) e nel caso il bitrate sia eccessivo per la rete che lo trasporta
può verificarsi un continuo ricaricamento
del buffer
Per evitare questi inconvenienti esistono altri
sistemi alternativi, che permettono
l'adattamento del file alla rete dell'utente finale,
questi sistemi sono caratterizzati dai protocolli:




Smooth Streaming, ideato da
Microsoft[5][6]
HTTP Dynamic Streaming soluzione
ideata da Adobe
HTTP Live Streaming soluzione
ideata da Apple
Octoshape è una piattaforma
proprietaria di streaming
multimediale, che utilizza la
tecnologia per offrire
un throughput migliore e rompere la
congestione nell'ultimo miglio. Ha la
possibilità di utilizzare una suite di
tecnologie multicast per ridurre al
minimo la larghezza di banda per
qualsiasi CDN, ISP, emittente o del
fornitore dell'ultimo miglio.
Per contro queste soluzioni sono notevolmente
più complesse rispetto alle tradizionali
tecnologie di streaming. Alcune delle
considerazioni documentate riguardano lo
stoccaggio, i costi aggiuntivi per la codifica e la
difficoltà nel mantenimento della qualità
globale. Ci sono state anche alcune dinamiche
interessanti trovate intorno alle interazioni
complesse fra logica adattiva bit rate in
competizione con complessa logica di controllo
del flusso TCP.[7][8]
Note[modifica | modifica wikitesto]
1.
2.
3.
4.
5.
6.
7.
8.
^ (EN) RFC 1945, su Internet Engineering
Task Force.
^ (EN) RFC 2068, su Internet Engineering
Task Force.
^ (EN) RFC 2616, su Internet Engineering
Task Force.
^ (EN) RFC 7540, su Internet Engineering
Task Force.
^ IIS Smooth Streaming
Technical Archiviato il 5 giugno 2011
in Internet Archive.
^ Smooth Streaming
^ An Experimental Evaluation of RateAdaptation Algorithms in Adaptive
Streaming over HTTP Archiviato il 17
ottobre 2011 in Internet Archive.
^ Is adaptive bit rate the yellow brick road,
or fool's gold for HD streaming?,
su fierceonlinevideo.com. URL consultato il 20
settembre 2011 (archiviato dall'url originale il 7
settembre 2011).
Bibliografia[modifica | modifica wikitesto]


RFC 1945 (Specifiche HTTP 1.0)
RFC 2616 (Specifiche HTTP 1.1)
Voci correlate[modifica | modifica
wikitesto]






Do not track header
File Transfer Protocol
HTTP tunneling
Protocollo di rete
SPDY
World Wide Web Consortium
Altri progetti[modifica | modifica
wikitesto]

Wikimedia Commons contiene
immagini o altri file su Hypertext
Transfer Protocol
Collegamenti
esterni[modifica | modifica wikitesto]

(EN) Hypertext Transfer Protocol,
su Enciclopedia Britannica,
Encyclopædia Britannica, Inc.
V·D·M
V·D·M
Controllo di autorità
LCCN (EN) sh97000529 · GND (DE) 4479982-2 · BNF
Portale Internet
Categoria:
 Hypertext Transfer Protocol
[altre]
Menu di navigazione


Accesso non effettuato
discussioni



contributi
registrati
entra






Voce
Discussione
Leggi
Modifica
Modifica wikitesto
Cronologia
Ricerca







Pagina principale
Ultime modifiche





Portale Comunità
Una voce a caso
Nelle vicinanze
Vetrina
Aiuto
Sportello informazioni
Comunità
Bar
Il Wikipediano
Fai una donazione
Contatti
Strumenti








Puntano qui
Modifiche correlate
Carica su Commons
Pagine speciali
Link permanente
Informazioni pagina
Cita questa voce
Elemento Wikidata
Stampa/esporta



Crea un libro
Scarica come PDF
Versione stampabile
In altri progetti

Wikimedia Commons
In altre lingue









Català
Deutsch
Ελληνικά
English
Français
Hrvatski
Lombard
Slovenščina
Vèneto
Altre 74
Modifica collegamenti
 Questa pagina è stata modificata per l'ultima volta il 20 set 2021 alle 00:19.
 Il testo è disponibile secondo la licenza Creative Commons Attribuzione-Condividi allo stesso
modo; possono applicarsi condizioni ulteriori. Vedi le condizioni d'uso per i dettagli.

Informativa sulla privacy

Informazioni su Wikipedia

Avvertenze

Versione mobile

Sviluppatori

Statistiche

Dichiarazione sui cookie


Download