Home

Il protocollo HTTP

È un protocollo a livello di applicazione. Esso è di fatto l'insieme di due applicazioni :

Durante una sessione GET/PUT del protocollo HTTP, viene aperta una sola connessione TCP/IP, che inizia con l'invio del comando di GET (da parte del client) e termina alla fine del comando di PUT (da parte del server).

Progettazione di un programma CGI

Il modo migliore per imparare come funziona il protocollo HTTP è vedere come funziona uno script CGI.

Possiamo suddividere in 4 fasi una sessione request-response immaginando di compiere una usuale operazione di invio di un form e di ritorno dei risultati elaborati dal CGI sulla base dei dati contenuti nel form:

  1. L'utente invia (submits) il form al server
  2. Il server salva nelle opportune variabili di ambiente i dati contenuti nel form e avvia l'applicazione CGI
  3. l'applicazione CGI esegue il parsing dei dati (a seconda del metodo (method) usato per inviare il form e invia i dati al server.
  4. il server invia i risultati ricevuti dall'applicazione distinguendo così come arrivano al browser (fa praticamente il passamano); in particolare i dati che l'applicazione invia devono possedere una intestazione (HTTP response header) e una parte che è un semplice documento HTML.

Una particolare attenzione va dedicata agli header HTTP.

Con essi è possibile informare il browser su quanto l'applicazione CGI (il server, solo "di sponda") gli sta per dare in pasto e su come deve comportarsi nei riguardi del documento in arrivo (ad esempio sul comportamento della cache).

Nella tabella seguente sono elencati gli header HTTP correntemente supportati dai browser commerciali.
header http supportati
Header Descrizione
Content-length La lunghezza in byte del flusso (stream) di output.
Content-type Il tipo MIME del contenuto dello stream di output
Expires La data e l'ora dopo le quali il documento ricevuto dal client scade; dopo tale tempo, il documento non deve più essere caricato dalla cache ma deve essere richiesto al server.
Location Redirezione del server: il CGI indica al server il documento da inviare al browser: il browser allora lo prende dal file system locale e lo invia al client.
Pragma Commuta lo stato della direttiva di caching del documento inviato al client: se è ON il browser può salvare in cache il documento, altrimenti non lo farà.
Status Stato della request. Il CGI (o il server direttamente) inviano al client un codice per segnalare le possibili eventualità. Vedi avanti un elenco degli Status codificati.
Refresh Il client richiederà al server di ricaricare il documento.
Set-Cookie Viene inviato un cookie (biscotto) al client. Questo è un metodo molto usato per tenere traccia di quale browser sta colloquiando con il server tra una richiesta e l'altra.

Per una lista completa degli header HTTP, fare riferimento al sito del Web Consortium.

Un esempio di script Perl che invia in standard output al server HTTP uno stream corretto è il seguente:


#!/usr/local/bin/perl



print "Content-type: text/html", "\n\n";

print "<html>", "\n"

print "<head><title>Semplice documento HTML generato dallo script", "\n"

print "<body>", "\n"

print "<h1>", "Documento virtuale", "</h1>", "<hr>", "\n"

print "</body></html>", "\n"



exit(0);

Un paio di regole per l'invio degli header:

Alcuni dettagli sugli HTTP header.

Content-type

È il tipo MIME del documento inviato; esso può assumere i valori "image/gif" come "text/plain" o "text/html".

Di solito il browser invia assieme ai dati del form anche un elenco dei tipi che può supportare. Questa informazione il server la salva nella variabile d'ambiente "HTTP_ACCEPT" che può essere letta dal CGI per stabilire se può o meno inviare un documento di un certo tipo.

Content-lenght

Può essere utile per dire in anticipo al server la lunghezza del documento in byte in do tale da intercettare eventuali errori di trasmissione tra CGI e server (ad es. caratteri di EOF spuri).

Location

Si usa nel caso in cui il risultato del CGI debba essere una redirezione del server ad un altro documento (in tal caso il CGI non fa praticamente nulla!)

Esempio:

#!/usr/local/bin/perl



print "Location: thanks.html", "\n\n";



exit(0);

In questo caso, il CGI dirà al server di pigliare il file thanks.html e di spedirlo al client.

Expires e Pragma

Entrambi informano il browser sul fatto che esso possa utilizzare o meno la cache. Se vogliamo che un documento non possa essere salvato in cache ma richiesto ogni volta al server (ad esempio le pagine seguenti una sessione di login che non debbono essere viste se non dall'utente autenticato e solo in quel momento) abbiamo due modi alternativi:

print "Pragma: no-cache", "\n\n";

oppure

print "Expires: Monday, 25-Mar-97 05:29:10 GMT", "\n\n"

Anche i browser possono richiedere al server la stessa cosa: occorre specificare i tag <meta> a livello di HTML header:

<meta http-equiv="expires" content="Monday, 25-Mar-97 05:29:10 GMT">

oppure

<meta http-equiv="pragma" content="no-cache">

Status codes

Il server o il CGI possono rispondere al browser con un codice nelle varie situazioni che vengono elencate in tabella
Codici di stato
Codice Descrizione
200 Successo
200 Successo
204 No response
301 Document moved
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal server error
501 Not implemented

Home

Copyright @ 2000-2017 Marco Barbato htttp://www.betaingegneria.it

Licenza Creative Commons
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.