{"id":993,"date":"2021-08-03T22:54:36","date_gmt":"2021-08-03T20:54:36","guid":{"rendered":"https:\/\/il-mio-ip.it\/?page_id=993"},"modified":"2021-08-03T23:25:56","modified_gmt":"2021-08-03T21:25:56","slug":"http-hypertext-transfer-protocol","status":"publish","type":"page","link":"https:\/\/il-mio-ip.it\/?page_id=993","title":{"rendered":"HTTP &#8211; HyperText Transfer Protocol"},"content":{"rendered":"\n<div class=\"wp-block-cover alignfull has-background-dim has-parallax has-background-gradient\" style=\"background-image:url(https:\/\/il-mio-ip.it\/wp-content\/uploads\/2021\/08\/servizi.jpg);min-height:380px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__gradient-background\" style=\"background:linear-gradient(100deg,rgb(21,50,67) 0%,rgb(26,108,122) 100%)\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<h1 class=\"has-text-align-center has-white-color has-text-color wp-block-heading\"><strong><strong><strong>HTTP &#8211; HyperText Transfer Protocol<\/strong><\/strong><\/strong><\/h1>\n<\/div><\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><span style=\"color: #0693e3;\" class=\"ugb-highlight\"><strong><strong><strong><strong><strong>Il protocollo HTTP<\/strong><\/strong><\/strong><\/strong><\/strong><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il protocollo HTTP, ovvero Hyper Text Transfer Protocol, in italian protocollo di trasferimento di un ipertesto, \u00e8 probabilmente il protocollo di livello Application pi\u00f9 utilizzato nelle comunicazioni tramite la rete Internet, ovvero nell\u2019ambito di una tipica architettura Client-Server. Le specifiche di questo 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 Transport.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Funzionamento<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il protocollo HTTP lavora gestendo lo scambio di messaggi dell\u2019architettura Client-Server secondo il seguente schema: il Client invia una richiesta al Server, il quale restituisce la risposta a tale richiesta. Il tipo esempio di architettura Client-Server \u00e8 costituito da un dispositivo che, tramite un Browser, effettua la richiesta di una pagina web ad un Server. I messaggi HTTP sono quindi di due tipi: messaggi di richiesta e messaggi di risposta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A differenza di altri protocolli di livello Application, che prevedono una chiusura esplicita della connessione tra due host (come ad esempio il protocollo FTP), nell\u2019HTTP le connessioni vengono automaticamente chiuse una volta che la richiesta dell\u2019host Client viene soddisfatta. Questo comportamento \u00e8 ideale nell\u2019ambito del World Wide Web, dove i server contengono pagine che a loro volta ospitano link ad altre pagine e quindi \u00e8 molto facile, anzi frequentissimo, dover passare da un Server all\u2019altro, con la necessit\u00e0 quindi di aprire nuove connessioni e di conseguenza dover chiudere quelle soddisfatte e non pi\u00f9 necessarie, in modo da diminuire il numero di connessioni attive limitandolo a quelle necessarie. Uno dei principali inconvenienti di questo protocollo \u00e8 tuttavia la sua condizione di protocollo stateless, ovvero senza stato, cio\u00e8 incapace di mantenere memoria delle sessioni di navigazione dell&#8217;utente. Questa particolarit\u00e0 ha costretto gli sviluppatori di contenuti per il Web ad adottare metodi alternativi per tenere traccia dello stato di navigazione dell\u2019utente, come ad esempio i cookie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Messaggi di richiesta<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel protocollo HTTP un messaggio di richiesta \u00e8 composto di quattro parti:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Riga di richiesta (request line);<\/li><li>Header (informazioni aggiuntive);<\/li><li>Riga vuota (CRLF: i 2 caratteri carriage return e line feed);<\/li><li>Body (corpo del messaggio).<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Riga di richiesta (request line)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La riga di richiesta \u00e8 composta da metodo, URI (Uniform Resource Identifier) e versione del protocollo. Il metodo di richiesta a sua volta pu\u00f2 essere di diversi tipi. La specifica 1.1 del protocollo prevede i seguenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>GET<\/li><li>POST<\/li><li>HEAD<\/li><li>PUT<\/li><li>DELETE<\/li><li>PATCH<\/li><li>TRACE<\/li><li>OPTIONS<\/li><li>CONNECT<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Chiariamo che con il termine di URI si indica l&#8217;oggetto della richiesta, ad esempio l\u2019indirizzo della pagina web che si intende ottenere dal server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I metodi HTTP pi\u00f9 utilizzato sono GET, HEAD e POST.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il metodo GET \u00e8 usato per ottenere il contenuto della risorsa indicata come URI. Il metodo HEAD \u00e8 analogo a GET, ma restituisce solo i campi dell&#8217;header (una richiesta effettuata con metodo HEAD non prevede l&#8217;uso del body) ad esempio per verificare informazioni di sistema non direttamente correlate ai dati, come la data di ultima modifica di un file.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il metodo POST invece \u00e8 usato prevalentemente per inviare informazioni al Server: esempio tipico di questo metodo sono i form di contatto che possono essere compilati in alcune pagine web e causano l\u2019invio di una mail. In questo caso l&#8217;URI indica che cosa si sta inviando e il body ne indica il contenuto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Header (informazioni aggiuntive);<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il campo header come sappiamo non \u00e8 strettamente correlato al contenuto intrinseco del messaggio, ma \u00e8 utilizzato per trasportare informazioni aggiuntive. Le principali informazioni comunicate tramite l\u2019header sono il nome Host, ovvero il server a cui l\u2019URL si riferisce, lo User Agent, ovvero il tipo di client usato (tipicamente il tipo browser e la relativa versione) e i Cookie, ovvero dei file di testo che memorizzano sulla macchina cliente delle informazioni sulla sessione di navigazione per sopperire parzialmente alla condizione di protocollo Stateless propria di HTTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Linea vuota<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La line vuota contiene solo 2 caratteri, che sono il carriage return, ovvero il ritorno a capo, e il line feed, ovvero l\u2019avanzamento di riga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Body<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il message Body, come facilmente intuibile, \u00e8 costituito dai dati che si vogliono effettivamente trasmettere al destinatario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Messaggio di risposta<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il messaggio di risposta \u00e8 di tipo testuale ed \u00e8 composto da quattro parti:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Riga di stato (status-line);<\/li><li>Header;<\/li><li>Riga vuota (CRLF: i 2 caratteri carriage return e line feed);<\/li><li>Body (contenuto della risposta).<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Riga di stato<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La riga di stato riporta i cosiddetti codici di stato http, ovvero informazioni aggiuntive circa l\u2019esito della connessione ed eventuali errori. Tali codici sono classificati in 5 categorie, a seconda del tipo di stato da riportare, e formati da codici di 3 cifre. Le categorie sono le seguenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>1xx: Informational (messaggi informativi)<\/li><li>2xx: Successful (la richiesta \u00e8 stata soddisfatta)<\/li><li>3xx: Redirection (non c&#8217;\u00e8 risposta immediata, ma la richiesta \u00e8 valida viene detto come ottenere la risposta)<\/li><li>4xx: Client error (la richiesta non pu\u00f2 essere soddisfatta perch\u00e9 sbagliata)<\/li><li>5xx: Server error (la richiesta non pu\u00f2 essere soddisfatta per un problema interno del server)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">I codici di risposta pi\u00f9 comuni sono invece i seguenti<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>200 OK. Il server ha fornito correttamente il contenuto nella sezione body.<\/li><li>301 Moved Permanently. La risorsa che richiesta non \u00e8 pi\u00f9 disponibile in quanto \u00e8 stata spostata in modo permanente.<\/li><li>302 Found. La risorsa \u00e8 raggiungibile con un altro URI indicato nel header Location. Di norma i browser eseguono la richiesta all&#8217;URI indicato in modo automatico senza interazione dell&#8217;utente.<\/li><li>400 Bad Request. La risorsa richiesta non \u00e8 comprensibile al server.<\/li><li>404 Not Found. Il Client error pi\u00f9 famoso e probabilmente pi\u00f9 comune: indica che la risorsa richiesta non \u00e8 stata trovata e non se ne conosce l&#8217;ubicazione. Di solito avviene quando l&#8217;URI \u00e8 stato indicato in modo incorretto, oppure quando la risorsa che era presente a quell\u2019URI \u00e8 stata rimossa dal server.<\/li><li>500 Internal Server Error. Il server non \u00e8 in grado di rispondere alla richiesta per un suo problema interno. Si tratta di uno degli errori pi\u00f9 insidiosi che si possono riscontrare, dato che non fornisce indicazioni di alcun genere circa la natura del problema riscontrato.<\/li><li>502 Bad Gateway. Il server web che agisce come reverse proxy non ha ottenuto una risposta valida dal server di upstream.<\/li><li>505 HTTP Version Not Supported. La versione di http non \u00e8 supportata.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Header<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I pi\u00f9 comuni header dei messaggi di risposta sono i seguenti:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Server. Indica il tipo e la versione del server. Pu\u00f2 essere visto come l&#8217;equivalente dell&#8217;header di richiesta User-Agent<\/li><li>Content-Type. Indica il tipo di contenuto che viene restituito, che pu\u00f2 essere di vario genere. I tipi disponibili sono detti Media Type e sono codificati dallo IANA (Internet Assigned Number Authority). I pi\u00f9 comuni Media Type sono i seguenti:<ul><li>text\/html Documento HTML<\/li><\/ul><ul><li>text\/plain Documento di testo non formattato<\/li><\/ul><ul><li>text\/xml Documento XML<\/li><\/ul><ul><li>image\/jpeg Immagine di formato JPEG<\/li><\/ul><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Tipologie di connessioni HTTP<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esistono due tipologie di connessione che il client pu\u00f2 chiedere al server:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Connessione non persistente<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per ogni richiesta e relativa risposta, viene stabilita una connessione TCP dedicata.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Connessione Persistente<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per ogni richiesta, e relativa risposta, la comunicazione avviene utilizzando la stessa connessione TCP. Questo \u00e8 il comportamento di default della versione 1.1 di HTTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Le due tipologie di connessione presentano ovviamente caratteristiche abbastanza diverse: da una parte le connessioni non persistenti introducono una latenza aggiuntiva alla comunicazione rispetto a quelle persistente. Dall\u2019altra parte per\u00f2 le connessioni persistenti, a fronte di una latenza minore, non possono usufruire dei vantaggi del parallelismo di comunicazione, dal momento che un cliente che deve gestire parecchie richieste contemporaneamente non potr\u00e0 evaderle se non in maniera sequenziale, una dopo l\u2019altro.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per questo motivo, infatti, i client (tipicamente i browser) solitamente sfruttano entrambe le tipologie di connessione per cercare di ottimizzare prestazioni ed efficienza e quindi di solito aprono con ogni server diverse connessioni TCP in parallelo, che poi utilizzano per comunicare con tipologia persistente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Versioni sicure del protocollo HTTP<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/il-mio-ip.it\/wp-content\/uploads\/2021\/08\/018-HTTPS_icon.png\" alt=\"\" class=\"wp-image-995\" width=\"400\" height=\"200\" srcset=\"https:\/\/il-mio-ip.it\/wp-content\/uploads\/2021\/08\/018-HTTPS_icon.png 800w, https:\/\/il-mio-ip.it\/wp-content\/uploads\/2021\/08\/018-HTTPS_icon-300x150.png 300w, https:\/\/il-mio-ip.it\/wp-content\/uploads\/2021\/08\/018-HTTPS_icon-768x384.png 768w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nonostante le sue caratteristiche di affidabilit\u00e0 e performance, il protocollo HTTP presenta il difetto di effettuare le comunicazioni completamente in chiaro e in maniera anonima, con i relativi problemi di sicurezza. Per ovviare a questo inconveniente sono state sviluppate le versioni sicure, che implementano ulteriori funzionalit\u00e0, finalizzate alla cifratura del traffico, al controllo dell\u2019integrit\u00e0 dei messaggi scambiati e all\u2019autenticazione tra client e server.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La versione oggi pi\u00f9 utilizzata \u00e8 HTTPS, HyperText Transfer Protocol over Secure Socket Layer. Questo protocollo estende HTTP in ottica di incrementare notevolmente la sicurezza. La porta logica utilizzata generalmente (ma non necessariamente) \u00e8 la 443, contro la porta 80 utilizzata da HTTP. Essenzialmente HTTPS stabilisce una comunicazione tramite il protocollo HTTP all&#8217;interno di una connessione criptata, tramite crittografia asimmetrica, create dal Transport Layer Security (TLS) o dal suo predecessore, Secure Sockets Layer (SSL) fornendo come requisiti chiave un sistema di autenticazione del sito web visitato, una protezione della privacy e garantendo l\u2019integrit\u00e0 sui dati scambiati.<\/p>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-flow wp-block-group-is-layout-flow\" style=\"background-color:#f3f9fb\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/il-mio-ip.it\/guida-al-networking\/livello-application-nel-protocollo-tcp-ip\/\" data-type=\"page\" data-id=\"990\">&lt;&lt; Livello Application<\/a><\/h3>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h3 class=\"has-text-align-right wp-block-heading\"><a href=\"https:\/\/il-mio-ip.it\/guida-al-networking\/server-proxy\/\" data-type=\"page\" data-id=\"997\"><strong><strong><strong><strong><strong><strong><strong><strong>Server Proxy<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong> &gt;&gt;<\/a><\/h3>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Il protocollo HTTP Il protocollo HTTP, ovvero Hyper Text Transfer Protocol, in italian protocollo di trasferimento di un ipertesto, \u00e8 probabilmente il protocollo di livello Application pi\u00f9 utilizzato nelle comunicazioni tramite la rete Internet, ovvero nell\u2019ambito di una tipica architettura Client-Server. Le specifiche di questo protocollo sono gestite dal World Wide Web Consortium (W3C). Un [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":647,"menu_order":53,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"right-sidebar","site-content-layout":"plain-container","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"enabled","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[10],"tags":[],"class_list":["post-993","page","type-page","status-publish","hentry","category-guida-al-networking"],"featured_image_urls_v2":{"full":"","thumbnail":"","medium":"","medium_large":"","large":"","1536x1536":"","2048x2048":""},"post_excerpt_stackable_v2":"<p>HTTP &#8211; HyperText Transfer Protocol Il protocollo HTTP Il protocollo HTTP, ovvero Hyper Text Transfer Protocol, in italian protocollo di trasferimento di un ipertesto, \u00e8 probabilmente il protocollo di livello Application pi\u00f9 utilizzato nelle comunicazioni tramite la rete Internet, ovvero nell\u2019ambito di una tipica architettura Client-Server. Le specifiche di questo 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 Transport. Funzionamento Il protocollo HTTP lavora gestendo lo scambio di messaggi dell\u2019architettura Client-Server secondo il seguente schema: il Client invia una&hellip;<\/p>\n","category_list_v2":"<a href=\"https:\/\/il-mio-ip.it\/?cat=10\" rel=\"category\">Guida al Networking<\/a>","author_info_v2":{"name":"admin","url":"https:\/\/il-mio-ip.it\/?author=1"},"comments_num_v2":"0 commenti","_links":{"self":[{"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=\/wp\/v2\/pages\/993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=993"}],"version-history":[{"count":4,"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=\/wp\/v2\/pages\/993\/revisions"}],"predecessor-version":[{"id":1042,"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=\/wp\/v2\/pages\/993\/revisions\/1042"}],"up":[{"embeddable":true,"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=\/wp\/v2\/pages\/647"}],"wp:attachment":[{"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/il-mio-ip.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}