Un protocollo è un insieme di regole che permettono di trovare uno standard di comunicazione tra diversi computer attraverso la rete. Quando due o più computer comunicano tra di loro si scambiano una serie di informazioni. Per potersi scambiare informazioni, i vari computer devono avere dei protocolli che permettano di attribuire ad un determinato messaggio un significato univoco per tutte le macchine. Un protocollo descrive: il formato che il messaggio deve avere il modo in cui i computer devono scambiarsi messaggi
HyperText Transfer Protocol risale alla fine degli anni ottanta come protocollo di trasferimento per il world wide web protocollo di livello applicazione per sistemi di informazione distribuiti, collaborativi, ipermediali usa la porta 80 TCP permette la costruzione di sitemi di accesso all informazione indipendentemente dal tipo dall informazione stessa permette la gestione dei messaggi in formato MIME (Multipurpose Internet Mail Extension)
Caratteristiche del protocollo HTTP Scambio di messaggi di richiesta e risposta Protocollo stateless (senza memoria) Basato sul meccanismo di naming degli URI per l identificazione delle risorse Web Gestione dei Metadati sulla risorsa ovvero INFORMAZIONI sulla risorsa (non la risorsa) come ad esempio: Dimensione della risorsa Tipo della risorsa (ad es. text/html) - MIME per classificare il formato dei dati Data dell ultima modifica della risorsa
Versioni HTTP HTTP/1.0-1996 (v. 0.9 del 1990-92) HTTP/1.1-1999
Tipologie di Messaggi HTTP richiesta risposta Composizione dei Messaggi HTTP Header (intestazione) - Testo ASCII Body (corpo) - OPZIONALE
Una richiesta HTTP comprende Metodo URI versionehttp informazioni aggiuntive Il metodo specifica il tipo di operazione che il client richiede al server URI identifica la risorsa locale rispetto al server Informazioni aggiuntive, come ad esempio: data e ora della richiesta user agent referrer...
Una risposta HTTP comprende versionehttp codice di stato e descrizione testuale altre informazioni riguardanti la risposta eventuale contenuto della risorsa richiesta Se la pagina Web richiesta è composta da molteplici risorse, ciascuna di esse è identificata da un URL differente: il browser deve inviare un messaggio di richiesta HTTP per ognuna delle risorse incorporate nella pagina.
GET / HTTP/1.1[CRLF] Host: www.zuccante.it[crlf] Connection: close[crlf] User-Agent: Web-sniffer/1.0.36 (+http://web-sniffer.net/)[crlf] Accept-Encoding: gzip[crlf] Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF] Cache-Control: no[crlf] Accept-Language: de,en;q=0.7,en-us;q=0.3[crlf] Referer: http://web-sniffer.net/[crlf] [CRLF] HTTP/1.1 200 OK(CR)(LF) Content-Length: 260(CR)(LF) Content-Type: text/html(cr)(lf) Content-Location: http://www.zuccante.it/prima.html(cr)(lf) Last-Modified: Fri, 08 Jan 2010 23:42:23 GMT(CR)(LF) Accept-Ranges: bytes(cr)(lf) ETag: "901feb39bc90ca1:30d2"(CR)(LF) Server: Microsoft-IIS/6.0(CR)(LF) Date: Mon, 09 Aug 2010 09:51:42 GMT(CR)(LF) Connection: close(cr)(lf) (CR)(LF) http://web-sniffer.net/ - http://www.rexswain.com/ httpview.html
Metodi della richiesta: GET HEAD POST PUT (1.0 non standard) DELETE (1.0 non standard) TRACE OPTIONS
Il metodo GET E il metodo più importante e frequente, viene utilizzato per richiedere una risorsa al server La richiesta è composta solo dall header GET /index.html GET /img/pippo.gif
Il metodo HEAD E una variante di GET utilizzata principalmente per scopi di controllo e debug Il server risponde soltanto con i metadati associati alla risorsa richiesta (solo header) Viene utilizzato per verificare: Validità URI: risorsa esiste e lunghezza non nulla AccessibilitàURI: risorsa accessibile no autenticazione Coerenza cache URI: risorsa non modificata rispetto a quella in cache
Il metodo POST Permette di trasmettere delle informazioni dal client al server Aggiornare una risorsa esistente o fornire dati di ingresso Il server può rispondere positivamente in tre modi: 200 OK: dati ricevuti e sottomessi alla risorsa specificata; è stata data risposta 201 Created: dati ricevuti, la risorsa non esisteva ed è stata creata 204 No content: dati ricevuti e sottomessi alla risorsa specificata; non è stata data risposta
Il metodo PUT Serve per trasmettere delle informazioni dal client al server, creando o sostituendo la risorsa specificata Differenza tra PUT e POST: l URI di POST identifica la risorsa che gestirà l informazione inviata nel corpo della richiesta l URI di PUT identifica la risorsa inviata nel corpo della richiesta: è la risorsa che ci si aspetta di ottenere facendo un GET in seguito con lo stesso URI Non offre nessuna garanzia di controllo degli accessi o locking
Un metodo HTTP può essere sicuro: non altera lo stato della risorsa idempotente: l effetto di più richieste identiche è lo stesso di quello di una sola richiesta GET è sicuro ed idempotente HEAD è sicuro ed idempotente POST è NON sicuro e NON idempotente PUT è NON sicuro ed idempotente
URI: Universal Resource Identifier E una forma generale per individuare una risorsa in rete URL: Uniform Resource Locator (posizione ed indirizzo) URN: Uniform Resource Name (nome)
URL schema://nodo:porta/path?query#ancora http://www.zuccante.it/info/trasparenza/ index.asp#linkart1 può essere assoluto o relativo (relativo parte dalla parte path)
Gli HEADER HTTP general header (Data, Pragma...) request header (User-Agent, Referer...) response header (Server, Location...) entity header (Content-Type, Content-Length...) Formato nome:valore Content-Type: text/html User-Agent: Web-sniffer/1.0.36 (+http://web-sniffer.net/)
Il CODICE DI STATO della risposta è un numero di tre cifre di cui la prima indica la classe della risposta e le altre due cifre la risposta specifica: 1xx: Informational (messaggi informativi) 2xx: Success (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 stato maggiormente utilizzati 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. 401 Unauthorized. La risorsa richiede autenticazione dell utente. 403 Forbidden. Accesso vietato. 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. 505 HTTP Version Not Supported. La versione di http non è supportata.
HTTPS HTTPS (Hypertext Transfer Protocol over Secure Socket Layer) è il risultato dell'applicazione di un protocollo di crittografia asimmetrica al protocollo HTTP. Viene utilizzato per garantire trasferimenti riservati di dati nel web, in modo da impedire intercettazioni dei contenuti. Nel browser, l URL ha come schema https. La porta di default impiegata è la 443 In modo del tutto trasparente all utente, tra il protocollo TCP ed HTTP si interpone un livello di crittografia/autenticazione come SSL (Secure Socket Layer) o il TLS (Transport Layer Security).
HTTPS TLS è il successore di SSL Nell'utilizzo tipico di un browser, l'autenticazione TLS è unilaterale: solo il server è autenticato (il client conosce l'identità del server), ma non vice-versa (il client rimane anonimo e non autenticato). L'autenticazione del server è molto utile per il software di navigazione e per l'utente. Il browser valida il certificato del server controllando la firma digitale dei certificati del server controllando che questa sia valida e riconosciuta da una certificate authority conosciuta utilizzando una cifratura a chiave pubblica. Dopo questa autenticazione il browser indica una connessione sicura mostrando solitamente un lucchetto in un'icona in basso a destra. Questa autenticazione, però, non è sufficiente per garantire che il sito con cui ci si è collegati sia quello richiesto. Per esserne sicuri è necessario analizzare il contenuto del certificato rilasciato e controllarne la catena di certificazione. Solo le CA possono generare certificati validi con un'url incorporata in modo che il confronto fra l'url. Il protocollo TLS permette anche un'autenticazione bilaterale, tipicamente utilizzata in applicazioni aziendali, in cui entrambe le parti si autenticano in modo sicuro scambiandosi i relativi certificati. Questa autenticazione (definita Mutual authentication) richiede che anche il client possieda un proprio certificato digitale.
HTTPS