Per richiedere documenti dai server Web, i browser utilizzano il protocollo HTTP. Potresti conoscere quel nome dalla tua barra degli indirizzi (ora potrebbe essere nascosto, ma quando fai clic sulla barra degli indirizzi, copi l'URL e lo incolli in un editor di testo, vedrai http://
all'inizio). HTTP è un semplice protocollo testuale. Funziona così:
Innanzitutto, il browser si connette al server del sito Web e invia un URL del documento che desidera scaricare (anche le pagine Web sono documenti) e alcuni dettagli sul browser stesso ( User-Agent ecc.). Ad esempio, per caricare la pagina principale sul sito SuperUser http://superuser.com/
, il mio browser invia una richiesta simile alla seguente:
GET / HTTP/1.1
Host: superuser.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.0 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: [removed for security]
DNT: 1
If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT
La prima riga specifica quale documento deve essere restituito dal server. Le altre linee sono chiamate header; sembrano così:
Header name: Header value
Queste righe inviano ulteriori informazioni che aiutano il server a decidere cosa fare.
Se tutto va bene, il server risponderà inviando il documento richiesto. La risposta inizia con un messaggio di stato, seguito da alcune intestazioni (con dettagli sul documento) e infine, se tutto va bene, il contenuto del documento. Ecco come appare la risposta del server SuperUser per la mia richiesta:
HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Content-Type: text/html; charset=utf-8
Expires: Tue, 09 Jul 2013 07:27:20 GMT
Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT
Vary: *
X-Frame-Options: SAMEORIGIN
Date: Tue, 09 Jul 2013 07:26:19 GMT
Content-Length: 139672
<!DOCTYPE html>
<html>
[...snip...]
</html>
Dopo l'ultima riga, il server di SuperUser chiude la connessione.
La prima riga ( HTTP/1.1 200 OK
) contiene il codice di risposta , in questo caso è 200 OK
. Significa che il server ha deciso di poter restituire un documento, come richiesto, e promette che il contenuto che segue sarà tale documento. In caso contrario, il codice sarà qualcos'altro e fornirà alcune indicazioni del motivo per cui il server non sta semplicemente restituendo un documento come risposta: ad esempio, se non riesce a trovare il documento richiesto, dovrebbe restituire 404 Not Found
e se non ti è consentito accedere al contenuto in questione, dovrebbe tornare 403 Forbidden
.
Dopo questa prima riga di stato, seguono le intestazioni di risposta; forniscono ulteriori informazioni sul contenuto restituito, come ad esempio il suo Content-type
.
La prossima è una riga vuota. Segnala il fatto che non seguiranno più header di risposta. Tutto oltre quella linea è il contenuto del documento richiesto. Quindi nell'esempio sopra, <!DOCTYPE html>
è la prima riga della home page di SuperUser (un documento HTML). Se avessi richiesto il download di un documento, probabilmente sarebbero stati alcuni caratteri incomprensibili, poiché la maggior parte dei formati di documento è illeggibile senza una precedente elaborazione.
Torna alle intestazioni. Il più interessante per noi è l'ultimo, Content-Length
. Informa il browser di quanti byte di dati dovrebbe aspettarsi dopo la riga vuota, quindi sostanzialmente è la dimensione del documento espressa in byte. Questa intestazione non è obbligatoria e può essere omessa dal server. A volte le dimensioni del documento non possono essere previste (ad esempio quando il documento viene generato al volo), a volte i programmatori pigri non lo includono (abbastanza comune sui siti di download dei driver), a volte i siti Web sono creati da principianti che non sanno di tale intestazione.
Comunque, qualunque sia il motivo, l'intestazione può mancare. In tal caso il browser non sa quanti dati il server invierà e quindi visualizza le dimensioni del documento come sconosciute , in attesa che il server chiuda la connessione. E questa è la ragione per dimensioni di documenti sconosciute.