[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