HTTP/1.1 200 OK Date: Tue, 19 Sep 2017 18:48:18 GMT Server: Apache Expires: Thu, 19 Nov 2017 08:52:00 GMT Cache-Control: no-store, no-cache Connection: Keep-Alive Content-Encoding: gzip Content-Type : text/html; charset=UTF-8 <!doctype html> <html> ....
A meno della prima riga (riga di stato) la risposta ha lo stesso formato della richiesta.
Nel caso delle risposta ri vede meglio la distinzione tra intestazione (la parte prima della riga vuota) e il corpo (la parte dopo la riga vuota) di cui in questo esempio si vedono soltanto le prime due righe.
riga di stato
Come è lecito aspettarsi ci viene detto l'esito della nostra richiesta! Analogamente alla risposta anche qui ci sono tre parti separate da uno spazio: protocollo, codice e descrizione dell'esito.
Il protocollo è specificato esattamente come nella richiesta, quel che segue è invece una doppia descrizione della risposta: in formato numerico e come testo.
In realtà la descrizione è ridondante perché dipende dal codice direttamente (ad esempio il codice 200 corrisponde alla descrizione "ok"). Ci sonono molti codici di risposta (qui una lista di più veloce consultazione): ognuno è formato da tre cifre in cui la prima dice l'esito generale. I gruppi sono questi:
- 1xx
- Informational
- 2xx
- Success
- 3xx
- Redirection
- 4xx
- Client error
- 5xx
- Server error
Vediamo alcuni esempi specifici con relative descrizioni testuali:
- 200 OK
- La richiesta ha avuto successo. Se ad esempio era un GET il contenuto della risorsa è nella sezione body della risposta.
- 301 Moved Permanently
- La risorsa che abbiamo richiesto non è raggiungibile perché
è stata spostata in modo permanente.
Negli header in un campo
Location
si trova la nuova posizione. - 302 Found
- La risorsa è raggiungibile temporaneamente 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.
- 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.
intestazione
Analoga a quella del client nel formato, vediamo alcuni header di esempio.
Server
La controparte di User-Agent
nella richiesta, il server
descrive se stesso!
Cache-Control
Sono indicazioni di come gestire il contenuto fornito in relazione alla cache del
programma che lo riceve. Ad esempio il valore public
indica che il contenuto può
essere memorizzato in cache mentre no-cache
indica che il contenuto della cache
deve essere validato dal server prima di essere usato.
Il valore no-store
indica che il contenuto non va memorizzato in cache.
Expires
Indica in pratica una data di scadenza dell'oggetto fornito, il formato è quello
delle marche temporali (timestamp) di HTTP, ad esempio:
Expires: Wed, 21 Oct 2015 07:28:00 GMT
Content-Type
È in pratica la risposta all'header Accept
della richiesta,
in questo modo il server dichiara il tipo mime della risposta e
la codifica dei caratteri, ad esempio: text/html; charset=UTF-8
.
Connection
Due possibili valori: close o keep-alive.
close
indica che la connessione va chiusta dopo questa risposta
(default per HTTP 1.0).
keep-alive
indica che il canale di comunicazione deve
rimanere aperto così da poter essere utilizzato per ulteriori richieste, è il default per
HTTP 1.1
corpo
È la risorsa che è stata richiesta ad esempio con un GET, può essere qualsiasi cosa, ad esempio una pagina html.