rispostaHttp

cosa contiene e come è formattata una risposta http

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.