HTTP - Messaggi
HTTP si basa sul modello di architettura client-server e su un protocollo di richiesta / risposta senza stato che funziona scambiando messaggi su una connessione TCP / IP affidabile.
Un "client" HTTP è un programma (browser Web o qualsiasi altro client) che stabilisce una connessione a un server allo scopo di inviare uno o più messaggi di richiesta HTTP. Un "server" HTTP è un programma (generalmente un server web come Apache Web Server o Internet Information Services IIS, ecc.) Che accetta connessioni per servire richieste HTTP inviando messaggi di risposta HTTP.
HTTP utilizza l'URI (Uniform Resource Identifier) per identificare una determinata risorsa e stabilire una connessione. Una volta stabilita la connessione,HTTP messagesvengono passati in un formato simile a quello utilizzato dalla posta Internet [RFC5322] e dal MIME (Multipurpose Internet Mail Extensions) [RFC2045]. Questi messaggi includonorequests da client a server e responses da server a client che avrà il seguente formato:
HTTP-message = <Request> | <Response> ; HTTP/1.1 messages
Le richieste HTTP e le risposte HTTP utilizzano un formato di messaggio generico di RFC 822 per il trasferimento dei dati richiesti. Questo formato di messaggio generico è costituito dai seguenti quattro elementi.
- A Start-line
- Zero or more header fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
Nelle sezioni seguenti, spiegheremo ciascuna delle entità utilizzate in un messaggio HTTP.
Riga di inizio messaggio
Una linea di partenza avrà la seguente sintassi generica:
start-line = Request-Line | Status-Line
Discuteremo Request-Line e Status-Line mentre discuteremo rispettivamente dei messaggi di richiesta HTTP e di risposta HTTP. Per ora vediamo gli esempi di linea di partenza in caso di richiesta e risposta:
GET /hello.htm HTTP/1.1 (This is Request-Line sent by the client)
HTTP/1.1 200 OK (This is Status-Line sent by the server)
Campi di intestazione
I campi di intestazione HTTP forniscono le informazioni obbligatorie sulla richiesta o sulla risposta o sull'oggetto inviato nel corpo del messaggio. Esistono quattro tipi di intestazioni dei messaggi HTTP:
General-header: Questi campi di intestazione hanno applicabilità generale sia per i messaggi di richiesta che per i messaggi di risposta.
Request-header: Questi campi di intestazione hanno applicabilità solo per i messaggi di richiesta.
Response-header: Questi campi di intestazione hanno applicabilità solo per i messaggi di risposta.
Entity-header: Questi campi di intestazione definiscono le meta informazioni sul corpo dell'entità o, se non è presente alcun corpo, sulla risorsa identificata dalla richiesta.
Tutte le intestazioni sopra menzionate seguono lo stesso formato generico e ciascuno dei campi di intestazione è costituito da un nome seguito da due punti (:) e il valore del campo come segue:
message-header = field-name ":" [ field-value ]
Di seguito sono riportati gli esempi di vari campi di intestazione:
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
corpo del messaggio
La parte del corpo del messaggio è facoltativa per un messaggio HTTP ma se è disponibile, viene utilizzata per trasportare il corpo dell'entità associato alla richiesta o alla risposta. Se il corpo dell'entità è associato, di solitoContent-Type e Content-Length le righe delle intestazioni specificano la natura del corpo associato.
Il corpo del messaggio è quello che trasporta i dati effettivi della richiesta HTTP (inclusi i dati del modulo e caricati, ecc.) E i dati della risposta HTTP dal server (inclusi file, immagini, ecc.). Di seguito viene mostrato il semplice contenuto del corpo di un messaggio:
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
I prossimi due capitoli faranno uso dei concetti spiegati sopra per preparare le richieste HTTP e le risposte HTTP.