Inserisci Infobox

I protocolli HTTP e HTTPS

HyperText Transfer Protocol: sintassi, headers, URI e methods. Introduzione a HTTPS.

Elementi del protocollo HTTP
Autore: al - Ultimo Aggiornamento: 2005-06-08 17:08:00 - Data di creazione: 2005-06-08 16:56:11
Tipo Infobox: SLIDE - Skill: 2- JUNIOR

HTTP è il protocollo usato per trasferire file fra client e server Web.
La versione maggiormente diffusa e utilizzata è la 1.1

Ogni richiesta HTTP da client a server è composta da:
- Metodo (GET, POST, HEAD...)
- Nome file (file.html) Il file richiesto, completo di path.
- Versione del protocollo utilizzata (1.1)
- Header che forniscono informazioni sul client e sul modo con cui trattare i file.

Una risposta HTTP da parte del server è composta da:
- Versione del protocollo utilizzata (1.1)
- Status Code (200, 403, 404...) Codice di risposta, che indica se la richiesta è stata esaudita con successo o se ci sono errori
- Header con informazioni sul file servito
- Dati con il contenuti del file fornito.

Gli Header di una richiesta lato client includono informazioni quali:
Host: openskills.info
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020513
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain... [...]
Accept-Language: en-us, en;q=0.50
Accept-Encoding: gzip, deflate, compress;q=0.9
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=fdcb56ecb694a7564dc814b422dd2a7d
Referer: http://openskills.info/modify/modify.php?table=box&IDbox=357
Content-Type: application/x-www-form-urlencoded
Content-Length: 2431


Le risposte del server contengono header (in parte diversi) come:
Date: Wed, 23 Oct 2002 08:38:51 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.3
X-Powered-By: PHP/4.2.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=25, max=85
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html

Introduzione al protocollo HTTP
Autore: al - Ultimo Aggiornamento: 2003-02-03 12:01:44 - Data di creazione: 2003-02-03 12:01:44
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Il protocollo HTTP (Hyper Text Transfer Protocol) viene usato da tutti i client e server web e gestisce il modo con cui questi si scambiano pagine HTML o altri file.

Il client web (cioè un browser come Microsoft Internet Explorer, Netscape Navigator, Opera ecc.) utilizza l'HTTP per richiedere file al server web. In primo luogo vengono richieste pagine HTML, che dopo essere state ricevute, vengono processate dal browser che provvede a fare richiesta di eventuali nuovi file richiamati nel codice HTML (immagini, fogli di stile css, script esterni ecc.) e a visualizzare il tutto sul monitor dell'utente.
Ogni richiesta http consta di:
- Metodo (GET, HEAD, PUT ...)
- URI (Uniform Resource Identifier) Il path o indirizzo completo della risorsa richiesta.
- Versione del protocollo (HTTP/1.0 o HTTP/1.1)
Un esempio tipico di una richiesta HTTP è:
GET / HTTP/1.0

Alla richiesta possono seguire degli HTTP headers come Accept-Language, Date, Expires e vari altri (possono essere arbitrariamente definiti fra broswer e server).

Esistono attualmente 3 specifiche del protocollo HTTP:
HTTP/0.9 - Di fatto non è più utilizzato da nessuna parte
HTTP/1.0 - Ancora abbastanza utilizzato e supportato da ogni browser e web server
HTTP/1.1 - Introduce nuovi metodi (OPTIONS, TRACE, DELETE, PUT, CONNECT) e la gestione di Virtual Host. E' supportato da tutti i browser e server non troppo vecchi ed è utilizzato nella maggior parte dei casi.

I metodi HTTP
Autore: al - Ultimo Aggiornamento: 2003-02-03 12:05:32 - Data di creazione: 2003-02-03 12:05:32
Tipo Infobox: DESCRIPTION - Skill: 4- ADVANCED

Un metodo HTTP può considerarsi un comando proprio del protocollo HTTP che il client richiede al server.
Ne esistono vari, ma di fatto i più utilizzati sono GET (per richiedere un file) e POST (per inviare informazioni al server).

GET - Richiede un file al server. La risposta è composta da vari header separati con due Carriage Return dalla risorsa effettivamente richiesta (il file HTML che contiene l'home page del sito). All'inizio della risposta viene specificato il protocollo usato (HTTP/1.1) e lo Status Code che indica l'esito della richiesta fatta (200 OK vuol dire che la richiesta ha avuto successo e il server ha fornito i dati chiesti).
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Wed, 23 Oct 2002 08:18:47 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.3
X-Powered-By: PHP/4.2.3
Set-Cookie: PHPSESSID=8fd7c6a69c84da8276187e18a3067b85; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Content-Type: text/html

[Contenuto della pagina HTML..]


HEAD - Richiede solo l'header, senza la risorsa (il file HTML, l'immagine, ecc.). Di fatto viene usato soprattutto per diagnostica.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Wed, 23 Oct 2002 08:31:36 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.3
X-Powered-By: PHP/4.2.3
Set-Cookie: PHPSESSID=d0226985ad2282fd9e2d9f6fb868b92a; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Content-Type: text/html


POST - Invia informazioni all'URI specificato. Le informazioni sono presenti in coppie attributo=valore&attributo=valore e vengono processate dal server sulla base di come è configurato e di come è fatto il file a cui vengono postate.
Viene qui riportato il POST di un browser reale, con tutti gli header inviati dal browser stesso e l'inizio delle coppie attributo=valore.
POST /modify/modify.php HTTP/1.1
Host: openskills.info
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9) Gecko/20020513
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1
Accept-Language: en-us, en;q=0.50
Accept-Encoding: gzip, deflate, compress;q=0.9
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=fdcb56ecb694a7564dc814b422dd2a7d
Referer: http://openskills.info/modify/modify.php?table=box&IDbox=357&boxtype=infobox&LANGUAGE=ita
Content-Type: application/x-www-form-urlencoded
Content-Length: 2431

IDbox=357&box_title=I+metodi+HTTP&[attributi=valori]


HTTP/1.1 200 OK
Date: Wed, 23 Oct 2002 08:38:51 GMT
Server: Apache/1.3.26 (Unix) PHP/4.2.3
X-Powered-By: PHP/4.2.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=25, max=85
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html

[HTML della pagina di risposta]


I metodi finora elencati sono comuni sia al protocollo HTTP/1.0 che all'HTTP/1.1, quelli che seguono invece sono esclusivi del HTTP/1.1 e, spesso, non vengono permessi dai server.
Nella configurazione di default di Apache, per esempio, sono disattivati.
Se si prova ad utilizzarli su server che non li permettono si ottiene uno Status code: 405 Method not allowed.
Quando si usa il protocollo HTTP/1.1 è necessario specificare l'host a cui si intende fare la richiesta.

OPTIONS - Richiede l'elenco dei metodi permessi dal server.
OPTIONS * HTTP/1.1
Host: openskills.info


TRACE - Traccia una richiesta, visualizzando come viene trattata dal server.
TRACE * HTTP/1.1
Host: openskills.info


DELETE - Cancella una risorsa (file) sul server. L'utente con cui gira il web server deve poter avere permessi in scrittura sul file indicato e il server deve essere configurato per poterlo fare.
DELETE /info.html HTTP/1.1
Host: openskills.info


PUT - Uploada un file sul server, creandolo o riscrivendolo, con il nome indicato e i contenuti specificati nella parte che segue gli header.
PUT /info.html HTTP/1.1
Host: openskills.info

[Contenuto file]

Gli header HTTP
Autore: Eberk - ( Revisione: al ) - Ultimo Aggiornamento: 2003-02-03 12:25:30 - Data di creazione: 2003-02-03 12:25:30
Tipo Infobox: DESCRIPTION - Skill: 4- ADVANCED

Gli header HTTP vengono trasferiti fra client e server e generalmente contengono meta-informazioni sul contenuto effettivo della risorsa (file) trasferita.
Il loro formato è:
NomeHeader: Valore (CRLF)
in una richiesta o una risposta HTTP possono esistere un numero arbitrario di header, il loro ordine non è importante ma è raccomandato un ordine sulla base delle categorie sotto indicate.

Esistono 4 categorie di header, di queste citiamo solo le voci più significative:

1 - GENERAL HEADERS
Contengono informazioni generali non relative al server, al client, al dato trasferito o al protocollo HTTP.
Cache-Control: direttive - Definisce le direttive sia associate a richieste che a risposte (separate da virgola) a cui devono obbedire tutti i sistemi di caching fra client e server. Quando sul proprio browser si cambiano le impostazioni relative alla cache, di fatto si modificano le direttive gestite con questo header.
Date: data_rfc-1123 - (es: Wed, 23 Oct 2002 18:59:12 GMT) La data è quella in cui il messaggio viene originato.
Pragma: no-cache - Il contenuto richiesto non deve essere messo in alcuna cache (del browser, di un proxy ecc.). Fondamentale per pagine dinamiche che devono essere sempre aggiornate.
Via: protocollo host_ricevente [commento] - Va aggiunto da proxy o gateway per indicare i protocolli e gli host intermedi fra client e server attraverso i quali è passata la richiesta.
Upgrade: protocollo/versione - Permette al client di specificare che supporta una versione di protocollo superiore a quella che si sta utilizzando (tipicamente HTTP/1.1 rispetto a HTTP/1.0) e al server di indicare su quale protocollo ha switchato.

2 - REQUEST HEADERS
Sono riservati alla richieste che il client esegue e contengono informazioni riguardo la richiesta stessa o il client.
Accept: tipo/sottotipo [;q=valore] - Indica quali tipi di file sono accettati dal client, in formato MIME (es: text/html). Con il parametro q (valori da 0 a 1) si definisce la preferenza relativa al tipo indicato (es: Accept: text/plain; q=0.5, text/html; q=0.8).
Accept-Charset: charset [;q=valore] - Indica i charset (set di caratteri per le diverse lingue) il client accetta e in che ordine.
Accept-Encoding: encoding-type [;q=valore] - Indica il tipo di encoding che il client può accettare (es: Accept-Encoding: gzip, default, compress;q=0.9).
Accept-Language: lingua [;q=valore] - Indica la lingua che il client preferisce e quali può comunque accettare (es: Accept-Language: en-us, en;q=0.5).
Authorization: credenziali - Quando l'utente si è autenticato e accede a pagine protette, il client con questo header fornisce le credenziali richeste ed evita ultetiori richieste di autenticazione da sottoporre all'utente.

3 - RESPONSE HEADERS
Sono riservati alle risposte del server e contengono info sul server stesso o sulla risorsa richiesta. Fra questi:
Age: secondi - Tempo stimato da quando è stata generata la risposta sul server.
Server string - Contiene informazioni sulla versione del software utilizzata dal server

4 -ENTITY HEADERS
Contengono meta-informazioni sull'entità (file) trasferito.
Content-Encoding: encoding - Indica quali tipi di encoding (es: gzip) sono stati fatte sul contenuto del messaggio, per permettere al client di decodificarlo.
Content-Language: lingue - Indica la lingua presunta dell'utente che riceve il file, si basa sull'analogo Request header Accept-Languages.
Content-Lenght: bytes - Indica la lunghezza in byte del file servito.
Expires: data - Indica la data dopo la quale il file servito è da considerare obsoleto. Va considerata da tutti i meccanismi di cache coinvolti nella richiesta.
Last-Modified: data - Indica la data di ultima modifica del file.

Status codes del protocollo HTTP
Autore: Eberk - Ultimo Aggiornamento: 2003-02-03 12:32:57 - Data di creazione: 2003-02-03 12:32:57
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

I server HTTP rispondono utilizzando linee di status che informano il client sull'esito della richiesta.
Gli status contengono 3 campi: versione del protocollo HTTP, status code e descrizione.
Lo status code è dato da un numero a 3 cifre con i seguenti significati:
1XX - Informational
2XX - Client request successful
3XX - Client request redirected, futher action necessary
4XX - Client request incomplete
5XX - Server errors

1xx - INFORMATIONAL
Questa classe di status consiste solo nella status line e in headers opzionali. HTTP/1.0 non definisce nessuno status code 1XX.
100 Continue - Il client può continuare con la sua richiesta. Questa risposta intermedia è inviata al client dal server per informarlo che la parte iniziale della sua richiesta non è stata respinta. Il client ora può completarla o ignorare la risposta se la richiesta è gia stata inviata per intero. Quando la richiesta è stata completamente inviata il server invierà una risposta finale.
101 Switching Protocols - Il server riceve una richiesta per il cambiamento del protocollo per quella connessione.

2xx - SUCCESSFUL CLIENT REQUEST
I seguenti status code indicano che la richiesta da parte del client è stata ricevuta, capita e accettata.
200 OK - La richiesta è stata accolta, il server risponde con i dati richiesti. E' la risposta normale per un file correttamente trasferito.
201 Created - La richiesta è stata effettuata ed una nuova risorsa è stata creata. L'URI rinviato nella risposta fa riferimento alla nuova risorsa creata.
202 Accepted - La richiesta è stata accettata ma non ancora processata.
203 Non-Authorative Information - L'insieme delle informazioni rimandate contenute nell'entity-header non è l'insieme di informazioni mandate dal server di origine ma provengono da una copia fatta in locale o da terzi.
204 No Content - Il server ha effettuato la richiesta ma non si necessita il rinvio dell'entity-body. A questa risposta il browser non dovrebbe aggiornare il documento visualizzato.
205 Reset Content - Il browser alla ricezione di questo status code dovrebbe resettare il contenuto del form che ha causato l'invio della richiesta.
206 Partial Content - Il server ha effettuato un GET parziale della risorsa. Questo succede quando risponde a una richiesta contenente un Range header.

3xx - CLIENT REQUEST REDIRECTED
Questa classe di status indica che si necessita di un'ulteriore azione per far si che la richiesta sia correttamente effettuata.
300 Multiple Choices L'URI richiesto corrisponde a piu documenti (per esempio un documento disponibile in piu lingue).
301 Moved Permanently - La risorsa richiesta è stata assegnata definitivamente ad un nuovo URI.
302 Moved Temporarily - La risorsa richiesta è stata assegnata temporaneamente ad un nuovo URI. Il client può usare il nuovo URI per le attuali richieste, ma in futuro (quando non vi sarà piu redirezione) dovrà usare il vecchio URI.
303 See Other - La risorsa richiesta si trova in un altro URI specificato nel Location header.
304 Not Modified - Il Client ha effettuato una richiesta GET condizionale usando l'If-Modified-Since header, ma la risorsa non è stata ancora modificata. La risorsa non viene mandata in quanto il client la possiede gia in locale.
305 Use Proxy - La risorsa richiesta deve passare per un proxy il cui l'URI è dato nel Location field.

4xx - CLIENT REQUEST ERRORS
La classe di status 4XX è riservata ai casi in cui il client commette degli errori.
400 Bad Request - Richiesta non capita dal server causa sintassi errata.
401 Authorization Required - Questo risultato è dato dal WWW-Authenticate header per indicare che la richiesta era sprovvista dell'autorizzazione che quella determinata risorsa richiede.
402 Payment Required - Questo codice è riservato ad usi futuri.
403 Forbidden - Il server capisce la richiesta ma si rifiuta di compierla. La richiesta non dovrebbe essere ripetuta.
404 Not Found - Il server non ha trovato nulla che corrisponda all'URI richiesto. Dopo il codice 200, questo è tipicamente quello più riscontrato nei log dei server web.
405 Method Not Allowed - Il metodo specificato nella request line non è disponibile per l'URI richiesto
406 Not Acceptable (encoding) - La risorsa identificata tramite richiesta può solo generare una risposta che ha caratteristiche incompatibili con gli accept headers contenuti nella richiesta.
407 Proxy Authentication Required - Questo codice indica che il client deve prima autenticarsi con il proxy, usando l'header Proxy-Authenticate.
408 Request Timed Out - Il client non ha fornito una richiesta nel tempo massimo di attesa del server.
409 Conflict - La richiesta non puo essere completata causa conflitto con il corrente stato della risorsa.
410 Gone - La risorsa richiesta non è piu disponibile sul server e il server non conosce indirizzi su cui ridirezionare.
411 Length Required - Il server si rifiuta di accettare la richiesta in quanto il client non ha definito il Content-Length.
412 Precondition Failed - Una o piu condizioni specificate negli IF request headers è risultata falsa al momento del test del server.
413 Request Entity Too Large - La richiesta è piu grande rispetto a quello che il server può processare.
414 Request URI Too Long - L'URI richiesto è troppo lungo per essere interpretato dal server.
415 Unsupported Media Type - Il corpo della richiesta è in un formato non supportato.

5xx - SERVER ERRORS
Questa classe di status è riservata ai casi in cui il server commette un errore o non è in grado di performare la richiesta. In genere richiede un intervento sistemistico sul server.
500 Internal Server Error - Il server è in una situazione inaspettata e non può rispondere alle richieste.
501 Not Implemented - Il server non è implementato per rispondere correttamente alla richiesta effettuata.
502 Bad Gateway - Il server collegato ad un gateway o ad un proxy, riceve una risposta non valida da questo.
503 Service Unavailable - Il server non può rispondere causa temporaneo overload.
504 Gateway Timeout - Il server collegato ad un gateway o ad un proxy, non riceve una risposta da questo nel tempo di attesa massimo impostato.
505 HTTP Version Not Supported - Il server non supporta la versione del protocollo HTTP utilizzato per fare la richiesta.

Privacy Policy