Hypertext Transfer Protocol: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
rivisto: tolti errori ed imprecisazioni. Aggiunto qualche chiarimento
Riga 16:
[[zh:超文本传输协议]]
 
'''HTTP''' è l'acronimo di '''H'''yper'''T'''ext '''T'''ransfer '''P'''rotocol (protocollo di trasferimento di
'''HTTP''' è l'acronimo di ''HyperText Transfer Protocol'' (Protocollo di trasferimento di un [[ipertesto]]). Usato come metodo primario per la trasmissione di informazioni sul [[World Wide Web|web]]. Le specifiche del protocollo sono attualmente in carica al [[W3C]] ([[World Wide Web Consortium]] - vedi sito: [http://www.w3c.org]).
un ipertesto). Usato come principale sistema per la trasmissione di informazioni
sul [[web]]. Le specifiche del protocollo sono attualmente in carica al [[W3C]] (World
Wide Web Consortium)
 
La prima versione dell'HTTP risale al [[1945]] ed frutto degli studi di [[Vannervar Bush]].
Si tratta di un protocollo di richiesta/risposta tra client e server. Un client HTTP, ad esempio un [[browser]], inizia la sua richiesta connettendosi ad una [[porta (computer)|porta]] [[TCP/IP]]: si tratta tipicamente della porta 80, anche se vengono talvolta utilizzate porte alternative, come la 81 o la 8080. Una volta stabilita la connessione il client invia una stringa di richiesta, ad esempio "GET / HTTP/1.1" (che in questo caso corrisponde alla richiesta della pagina di default, o ''home page'', del server web). Il server a sua volta risponde inviando un file o un messaggio di errore (nel caso, ad esempio, che la pagina richiesta non esista). La risposta del server è preceduta da un'intestazione HTTP (detta ''HTTP header''), cioè da un insieme di stringhe di caratteri [[ASCII]] che contengono informazioni sul server stesso e sul file che viene inviato. Il protocollo HTTP è definito nella [[RFC]] 2068.
Venne pensato per la gestione in rete dei documenti [[HTML]].
L'HTTP funziona su un mecchanismo richiesta/risposta: il client esegue una
richiesta ed il server restituisce la risposta. Nell'uso comune il client
corrisponde al browser ed il server al sito web.
Vi sono quindi tue tipi di messaggi HTTP: messaggi richiesta e messaggi
risposta.
 
HTTP differisce da altri protocolli basatidi sulivello TCP,5 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. Talvolta peròperò pone problemi aiagli Websviluppatori designersdi contenuti web, perchèperchè l'assenzala dinatura unasenza connessionestato (''stateless'') persistente costringe ad utilizzare dei metodi alternativi per conservare lo ''stato'' dell'utente. Spesso questi metodi alternativi si basano sull'uso dei ''[[cookie|cookie HTTP]]'' .
 
Esiste anche una versione sicura del protocollo HTTP: chiamata '''[[HTTPS]]''', usa vari sistemi di [[crittografia]] per rendere la comunicazione comprensibile solo a client e server.
 
Le versioni attualmente in uso dell'HTTP sono la 1.0 e la 1.1.
== Esempio di comunicazione HTTP tra client e server ==
Cconversazione di esempio tra un client ed il server web www.wikipedia.org
 
== Messagio di richiesta ==
'''richiesta del client''':
Il messaggio richiesta è composto di tre parti:
<pre>
* Linea di richiesta (request line)
GET / HTTP/1.1
* Sezione Header (informazioni aggiuntive)
Host: www.wikipedia.org
* Body (corpo del messaggio)
</pre>
 
=== Linea di richiesta ===
La richiesta viene terminata con una riga vuota.
La linea di richiesta è composta dal metodo, URI e versione del protocollo.
Il metodo di richiesta può essere uno dei seguenti
* GET
* POST
* HEADER
* PUT
* DELETE
* TRACE
* CONNECT
 
l<nowiki>'</nowiki>'''[[URI]]''' sta per '''U'''niform '''R'''esource '''I'''dentifier ed indica l'oggetto della richiesta
<!-- Note that a newline is sent as a [[carriage return]] followed by a [[line feed]]. In most programming languages, this is called CRLF or \r\n. -->
(ad esempio la pagina web che si intende ottenere)
 
I metodi HTTP più comuni sono GET e POST.
Il metodo GET è usato per ottenere il contenuto della risorsa indicata come URI
(come può essere il contenuto di una pagina HTML ).
Una richiesta con metodo GET non prevede l'uso del body
 
Il metodo POST è usato di norma per inviare informazioni al server (ad esempio
'''risposta del server''':
i dati di un form)
<pre>
In questo caso l'URI indica che cosa si sta inviando e il body ne indica il
HTTP/1.1 200 OK
contenuto.
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; ___domain=.google.com
Connection: keep-alive
</pre>
 
=== Gli header della richiesta ===
(segue il codice HTML della pagina principale del sito www.wikipedia.org)
Gli header di richiesta più comuni sono:
 
'''Host'''. Nome del server a cui si riferisce l'URI).
== Collegamenti esterni ==
 
* [[Tim Berners-Lee]] 1992 ''internet draft'' http://www.w3.org/Protocols/HTTP/HTTP2.html
'''User-Agent'''. Identificazione del tipo di client: tipo browser, marca, versione
* [[RFC]] 2616 (definisce il protocollo HTTP 1.1) http://www.w3.org/Protocols/rfc2616/rfc2616.html
ecc.)
* [http://www.delorie.com/web/headers.html visualizzatore degli ''header HTTP'' inviati da un server web]
 
== Messaggio di risposta ==
Il messaggio di risposta è composto dalle seguenti tre parti:
* Linea di stato (status-line)
* Sezione header
* Body (contenuto della risposta)
 
=== Linea di stato ===
La linea di stato riporta un codice a tre cifre catalogato nel seguento modo:
 
1xx : Informational
2xx: Success
3xx: Redirection
4xx: Client error
5xx: Server error
 
Nel caso più comune il server risponde con un codice 200 (OK) e
fornisce contentuto nella sezione body.
Altri casi comuni sono:
 
'''302 Found'''. La risorsa è raggoiungibile con un altro URI indicato nel header
Locaion. Di norma i browser eseguono la richiesta all'URI indicato in modo
automatico senza interazione dell'utente.
 
'''404 Not Found'''. La risorsa richiesta non è stata trovata e non se ne conosce
l'ubicazione. Di solito avviene quando l'URI è indicato in modo incorretto od è
stato il contenuto dal server.
 
'''500 Internal Server Error'''. Il server non è in grado di risolvere la richiesta
per un suo problema interno.
 
=== Gli header della risposta ===
Gli header della risposta più comuni sono:
* '''Server'''. Indica il tipo la marca , la versione del server. Un po' l'equivalente dell'header di richiesta User-Agent
* '''Content-Type'''. Indica il tipo di contenuto restituito. La codifica di tali tipi (detti Media type) sono registrati presso '''[[IANA]]''' ('''I'''nternet '''A'''ssigned '''N'''umber '''A'''uthority ) e sono detti tipi '''[[MIME]]''' ('''M'''ultimedia '''I'''nternet '''M'''essage '''E'''xtensions), la loro codifica è descritta nel documento RFC 1521. I principali sono:
** '''text/html'''. Documento HTML)
** '''text/plaintext'''. Documento di testo non formattato)
** '''image/jpeg'''.Immagine di fromato '''[[JPEG]]'''
 
== Esempi di messaggi HTTP ==
 
Richiesta:
 
GET /wiki/Pagina_principale HTTP/1.1
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Accept-Encoding: x-gzip, x-deflate, gzip, deflate, identity
Accept-Charset: iso-8859-1, utf-8;q=0.5, *;q=0.5
Accept-Language: en
Host: it.wikipedia.org
 
Risposta:
 
HTTP/1.0 200 OK
Date: Mon, 28 Jun 2004 10:47:31 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4
X-Powered-By: PHP/4.3.4
Vary: Accept-Encoding,Cookie
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
Content-Language: it
Content-Type: text/html; charset=utf-8
Age: 7673
X-Cache: HIT from wikipedia.org
Connection: close
<HTML>
[ ...]
 
== Riferimenti ==
* [ftp://ftp.rfc-editor.org/in-notes/rfc1945.txt Specifiche HTTP 1.0]
* [ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt Specifiche HTTP 1.1]