Slide dall'Università sul Protocollo HTTP. Il Pdf esplora l'origine e l'evoluzione del protocollo HTTP, inclusi QUIC e HTTP/3, e le caratteristiche dei web-service REST. Questo materiale di Informatica è adatto per lo studio autonomo a livello universitario.
Mostra di più44 pagine
Visualizza gratis il Pdf completo
Registrati per accedere all’intero documento e trasformarlo con l’AI.
L'idea di realizzare un nuovo protocollo applicativo che rendesse disponibili in rete pagine di testo formattato collegate le une alle altre e contenenti elementi multimediali (immagini, video, ecc.) la si deve al fisico e informatico inglese Tim Berners-Lee che, presso il CERN di Ginevra, il Centro Europeo per la Ricerca Nucleare, tutt'oggi il più moderno e grande laboratorio di fisica atomica al mondo, la concretizzò nel corso del 1991. Scopo di Tim Berners-Lee era quello di rendere fruibili tramite Internet, ai ricercatori e agli scienziati di tutto il mondo, gli articoli scientifici in un formato ipertestuale comodamente leggibile, non a caso denominò il nuovo protocollo di rete HTTP; comunque la sua visione del futuro sviluppo della nuova tecnologia era molto chiara, tanto da denominarla fin da subito WWW, World Wide Web, letteralmente «ragnatela a estensione mondiale».Molti protocolli di rete del livello applicazione che impiegano il protocollo di trasporto TCP realizzano un modello di cooperazione asimmetrica tra i due computer, o dispositivi, che partecipano alla comunicazione e che prendono rispettivamente il nome di client e server:
I siti web sono ospitati su computer server che ricevono dai browser, in esecuzione su computer o dispositivi client, le richieste per singole pagine web che costituiscono il sito e alle quali rispondono inviando il contenuto delle pagine richieste. Il protocollo HTTP è il protocollo applicativo che regola il trasferimento delle pagine web dal web server al browser del client file pagine web pagine web visualizzate richieste HTTP GET risposte HTTP (pagine web) web server client (browser) Internet (protocolli TCP/IP)Il protocollo HTTP Fin dall'inizio il protocollo applicativo HTTP (Hyper-Text Transfer Protocol) fu concepito per gestire risorse mediante comandi di richiesta, aggiornamento, creazione ed eliminazione. Per un browser che effettua richieste a un web server le risorse sono le pagine che visualizza, ma oggi molte applicazioni e APP utilizzano il protocollo HTTP per richiedere, aggiornare, creare ed eliminare risorse software di qualsiasi tipo, come i record delle tabelle di un database. Il protocollo applicativo HTTP utilizza normalmente la porta TCP 80 con schema URL le la comunicazione client/server è possibile adottare il protocollo TLS (Transport Layer Security) per autenticare e cifrare la comunicazione effettuata con il protocollo di trasporto TCP: il protocollo TLS si interpone tra il livello di trasporto e quello applicativo e sulla sua base è stata realizzata la versione sicura del protocollo HTTP denominata HTTPS (HTTP Secure) che utilizza normalmente la porta TCP 443 con schema URL https: .Il protocollo HTTP - almeno nella sua versione originale - è un protocollo prevalentemente testuale (le richieste effettuate e le relative risposte fornite sono stringhe di caratteri alfanumerici): il client invia al server richieste a cui il server risponde con una stringa di stato seguita dalla risposta vera e propria.
Le pagine web che un computer server invia in risposta alle richieste di un computer o di un dispositivo client sono codificate in un linguaggio ideato da Tim Berners-Lee, il linguaggio HTML, Hyper-Text Markup Language. Il browser del computer o dispositivo client ha il compito di interpretare il linguaggio HTML con cui sono definite le pagine web e di visualizzarne il contenuto (testo e immagini, ma anche elementi multimediali quali suoni, musica, video, ecc.) con l'aspetto che il codice HTML stesso definisce.Accedendo con un client Telnet a un web server in esecuzione sullo stesso computer e che ha nella propria directory di lavoro il file hello.html contenente il codice HTML di una semplice pagina web, si possono inviare richieste e visualizzare le relative risposte. Inviando la seguente richiesta GET /hello.html HTTP/1.1 Host: 127.0.0.1 La specificazione del riferimento del server che ospita la risorsa richiesta (in questo caso è stato fornito l'indirizzo IP) mediante lo header Host è obbligatoria e consente l'adozione di server virtuali che condividono lo stesso web server. si ottiene una risposta simile a questa:linea di stato HTTP/1.1 200 OK Date: Sun, 15 Aug 2021 06:10:40 GMT Server: Apache/2.4.48 (Win64) OpenSSL/1.1.1k PHP/8.0.9 Last-Modified: Sun, 15 Aug 2021 05:58:59 GMT Content-Length: 107 Content-Type : text/html <html> <head> <title>Hello world</title> </head> <body> <p>Hello world !< /p> </body> </html> Identificatore HeaderNella risposta fornita dal server nell'esempio precedente è chiaramente riconoscibile la linea di stato HTTP/1.1 200 OK seguita da più linee denominate header, ciascuna delle quali è composta da un identificatore seguito dal simbolo « :» e dal relativo valore (sono facilmente riconoscibili la data/ora della risposta, la data/ora di modifica della pagina, la descrizione del web server, la dimensione in byte del contenuto restituito e il relativo tipo). Le richieste che un client può inoltrare a un server HTTP sono basate su alcune parole chiave che identificano altrettanti metodi corrispondenti, sempre riferiti a una risorsa identificata dall'URL compreso nella richiesta stessa, da uno o più header che specificano informazioni relative alla richiesta e - opzionalmente - da un body, cioè da dati associati alla richiesta necessari per l'aggiornamento o la creazione della risorsa.
Metodo | Operazione |
---|---|
GET | Richiede al server la risorsa identificata dall'URL specificato. [impiegato dai browser per richiedere ai server le pagine web che visualizzano] |
HEAD | Come GET, ma la risposta fornita dal server non comprende la risorsa (solo alcune informazioni relative alla risorsa note come header). |
POST | Integra la risorsa identificata dall'URL specificato con le informazioni inviate. |
PUT | Crea o aggiorna la risorsa identificata dall'URL specificato a partire dalle informazioni inviate. |
DELETE | Elimina la risorsa identificata dall'URL specificato. |
TRACE | Richiede al server una risposta costituita dalle informazioni inviate (echo). |
CONNECT | Richiede al server un accesso diretto al protocollo TCP o altro protocollo. |
OPTIONS | Richiede al server l'elenco dei metodi accettati per la risorsa identificata dall'URL specificato. |
PATCH | Richiede al server di modificare in modo parziale la risorsa identificata dall'URL specificato con le informazioni inviate. |
Categoria | Descrizione |
---|---|
1XX (100, 101, ... ) | Informativa (codici di negoziazione tra client e server). |
2XX (200, 201, ... ) | Successo (codici che confermano al client che la richiesta avanzata al server è stata eseguita correttamente). |
3XX (300, 301, ... ) | Ridirezione (codici che comunicano al client che la richiesta avanzata al server NON è stata eseguita a causa di un'errata specificazione della risorsa: nella risposta può essere fornita una nuova valida specificazione). |
4XX (400, 401, ... ) | Errore del client (codici che comunicano al client che la richiesta avanzata al server NON è stata eseguita perché errata). |
5XX (500, 501, ... ) | Errore del server (codici che comunicano al client che la richiesta avanzata al server NON è stata eseguita a causa di un errore del server). |
Codice di stato | Descrizione |
---|---|
100 Continue | La richiesta avanzata parzialmente può essere completata. |
101 Switching Protocol | Conferma del cambiamento di protocollo richiesto. |
200 OK | Richiesta eseguita con successo. |
201 Created | Risorsa creata con successo. |
202 Accepted | Richiesta accettata, ma non ancora eseguita. |
204 No Content | Richiesta eseguita con successo, ma senza restituire un contenuto. |
300 Multiple Choices | Esistono versioni multiple per la risorsa richiesta. |
301 Moved Permanently | La risorsa specificata esiste, ma è diversamente identificata. |
303 See Other | Il server non dispone della risorsa richiesta che può essere acceduta con un diverso URL specificato nello header Location della risposta. |
304 Not Modified | La risorsa richiesta non è stata modificata della precedente richiesta. |
400 Bad Request | Richiesta errata. |
401 Unauthorized | Richiesta non autorizzata in mancanza di informazioni di autenticazione. |
403 Forbidden | Richiesta proibita dai requisiti di sicurezza del server. |
404 Not Found | Risorsa specificata non esistente. |
405 Method Not Allowed | Metodo non accettato per la risorsa specificata. |
406 Not Acceptable | Il server non può rispondere alla richiesta rispettando le condizioni definite dagli header. |
408 Request Time-out | La richiesta non è stata ricevuta dal server in tempo utile. |
409 Conflict | Richiesta che genera un conflitto di aggiornamento della risorsa specificata. |
410 Gone | La risorsa richiesta non è disponibile e non lo sarà in futuro. |
414 URL Too Long | L'URL della richiesta è troppo lungo. |
415 Unsupported Media Type | La richiesta specifica un tipo MIME che il server non supporta per la risorsa specificata. |
426 Upgrade Required | Il server richiede il passaggio a una diversa versione del protocollo. |
429 Too Many Request | Il server ha ricevuto troppe richieste in un determinato periodo di tempo. |
500 Internal Server Error | Errore generico del server. |
501 Not Implemented | Metodo non implementato dal server. |
503 Service Unavailable | Server temporaneamente non disponibile. |
505 HTTP Version Not Supported | Il server non supporta la versione HTTP utilizzata per la richiesta. |
Header | Richiesta | Risposta | Descrizione |
---|---|---|---|
Host | × | Nome di dominio o indirizzo IP del server che ospita la risorsa. | |
Server | × | Nome del server HTTP che fornisce la risposta. | |
Date | × | × | Data/ora di invio della richiesta o della risposta. |
Content-Length | × | × | Dimensione in byte del body della risposta o della richiesta. |
Content-Type | × | × | Tipo MIME (Internet Media Type) del body (esempio: text/html). |
Last-Modified | × | Data/ora di ultima modifica del body della risposta. | |
Accept | × | Elenco di tipi MIME accettati dal client (esempi: text/xml, text/json, ... ). | |
Accept-Encoding | × | Tipo di codifica/compressione accettati dal client. | |
Accept-Charset | × | Tipi di codifica dei caratteri accettati dal client (esempi: utf-8, iso-8859-1, ... ). | |
User-Agent | × | Informazioni relative al client che esegue la richiesta. | |
Authorization | × | Informazioni di autenticazione del client. | |
Content-Encoding | × | Tipo di codifica/compressione del body della risposta. | |
Upgrade | × | Richiesta di aggiornamento a un diverso protocollo come HTTPS o HTTP/2. |