Home Mappa Indice Ricerca News Archivi Link A proposito di LF
[Barra superiore]
[Barra inferiore]
Questo documento è disponibile in: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

[Photo de l'auteur]
di Charles vidal

Notizie sull'autore:

Presidente di un lug (Linux Users Group, N.d.T.) gastronomico di Parigi. Ama la filosofia GNU e l'Open Source, perché aiutano a diffondere conoscienza. Gli piacerebbe avere del tempo per suonare il sassofono.

Contenuto:

Apache part I

[Illustration]

Sommario:

Questo è un articolo che parla del server web più usato su internet: Apache. E' diviso in due parti: la prima parla sommariamente della storia del World Wide Web mentre la seconda è un'introduzione al protocollo HTTP.



 

Storia

Il concetto di HTTP (client e server) è stato sviluppato da un team di sviluppatori che lavorano al CERN (Centre Européen de Recherche Nucléaire).
Dopo aver completato il lavoro di ricerca, lo donarono all'American University (NSCA).
Immagino che parecchie persone saranno stupite nell'apprendere che le basi del moderno World Wide Web sono state create da Europei (e in particolare Francesi).


Apache è il nome di progetto relativo ad un WEB server free. Il nome Apache ha delle origini dubbie, alcuni dicono che derivi da "a patchy server" (un server “patchato”, N.d.T.) a causa delle numerose patches all'inizio (un trucco da Hacker :-)), altri hanno una spiegazione molto più seria: dicono che i fondatori del progetto presero il nome in memoria della tribù degli Apache. Una tribù con una grande adattabilità.

E' il server web più usato su Internet. E' basato sul protocollo HTTP (1.1), standardizzato dal consorzio w3.
Un'indagine di Netcraft, del 1999, ha evidenziato che circa il 60,05% dei servers web sono dei servers Apache.
Un server web è la parte server del concetto di client-server. Risponde alle richieste dei “web clients” come ad esempio il web browser lynx ;-).


 

Il protocollo HTTP

Server e client parlano tra loro con il protocollo HTTP (Hypertext Transfer Protocol). La corrente versione dell'HTTP 1.1 è definita nell'RFC 2616
Questo protocollo è diviso in due parti: la richiesta del client e la risposta del server. Il protocollo è basato su testo ASCII.


  1. La richiesta :

    Questa è una linea di testo divisa in 3 parti :

    1. [tipo di richiesta]

    2. [URL]

    3. [Protocollo usato]

    4. Le richieste possibili sono: GET, POST, HEAD, PUT, DEL, TRACE.

    5. L'URL è il percorso che volete visualizzare e segue in nome di dominio (ad esempio www.linuxfocus.org è il nome di dominio e /Francais è l'URL della pagina di benvenuto in francese)

    6. Il protocollo usato può essere HTTP/1.0 o HTTP/1.1

    Questa linea può essere seguita da altre linee che specificano la richiesta, come con una richiesta HTTP/1.1


  2. La risposta :

    La risposta del server è composta da un header e dal corpo, in relazione al tipo di richiesta.

                >telnet www.linuxfocus.org 80
                Trying 195.53.25.18...
                Connected to nova.linuxfocus.org.
                Escape character is '^]'.
                GET / HTTP/1.0 <return>
                <return>
                HTTP/1.1 200 OK
                Date: Mon, 27 Sep 1999 21:23:20 GMT
                Server: Apache/1.3.3 (Unix) (Red Hat/Linux)
                Last-Modified: Sun, 26 Sep 1999 16:40:44 GMT
                ETag: "4b005-1616-37ee4c8c"
                Accept-Ranges: bytes
                Content-Length: 5654
                Connection: close
                Content-Type: text/html
                <PAGE HTML>
                

    Cosa dice la risposta del server?
    La prima linea parla del protocollo usato e restituisce un valore del server (un valore superiore a 400 indica un errore). E' seguito dalla data, la versione del server e la data dell'ultima modifica dell'URL (permette al client di sapere se i files nella sua cache sono ancora validi). Content-Length è la lunghezza della risposta (richieste a scripts CGI non forniscono queste informazioni) e Content-Type comunica al web client il tipo di MIME usato nella risposta (testo, html, immagini ...).

    Questa non è una descrizione completa: alcune linee sono un mistero anche per me ;-)
    Ecco cosa succede quando c'è un errore:

            >telnet www.linuxfocus.org 80
            Trying 195.53.25.18...
            Connected to nova.linuxfocus.org.
            Escape character is '^]'.
            get / HTTP/1.0 <return>
            <return>
            HTTP/1.1 501 Method Not Implemented
            Date: Mon, 27 Sep 1999 21:22:03 GMT
            Server: Apache/1.3.3 (Unix) (Red Hat/Linux)
            Allow: GET, HEAD, OPTIONS, TRACE
            Connection: close
            Content-Type: text/html
            

    Come potete vedere, l'header rende inutile alcuna spiegazione ;-)
    L'HTTP è un protocollo molto semplice, come è ben evidenziato da questi esempi:

            >telnet www.linuxfocus.org 80
            Trying 195.53.25.18...
            Connected to nova.linuxfocus.org.
            Escape character is '^]'.
            GET / < return >
                  < return >
            

    [segue quindi il contenuto dell'index.html di www.linuxfocus.org ]..

    Cosa è successo dentro il server Apache?
    Vi siete connessi con il telnet alla porta 80 di www.linuxfocus.org (indirizzo IP 195.53.25.1) (la 80 è la porta standard del server http). Il server è stato scritto per rispondere a delle richieste e voi avete scritto GET / seguito da due return.
    Perché questi due returns ?
    La linea vuota segnala al server che questa è l'ultima linea della richiesta. La risposta del server consiste nella trasmissione del file (index.html). La connessione TCP/IP viene chiusa alla fine del trasferimento.

    Come potete vedere, il linguaggio usato tra il client e il server è molto semplice, ma diventa tutto più complicato con la versione 1.1 (infatti abbiamo appena parlato della versione 1.0) della richiesta:

    GET / HTTP/1.0< return >
    < return >
    HTTP/1.1 200 OK
    Date: Tue, 24 Aug 1999 22:25:11 GMT
    Server: Apache/1.3.3 (Unix) (Red Hat/Linux)
    Last-Modified: Sun, 01 Aug 1999 11:50:52 GMT
    ETag: "4b005-1462-37a4349c"
    Accept-Ranges: bytes
    Content-Length: 5218
    Connection: close
    Content-Type: text/html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ....

    Scrivendo 1.1 riceviamo:

    GET / HTTP/1.1 <return >
    < return >
    HTTP/1.1 400 Bad Request
    Date: Tue, 24 Aug 1999 22:24:59 GMT
    Server: Apache/1.3.3 (Unix) (Red Hat/Linux)
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/html
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <HTML><HEAD>
    <TITLE>400 Bad Request</TITLE>
    </HEADBODY>
    <H1>Bad Request</H1>
    Your browser sent a request that
    this server could not understand.<P>
    client sent HTTP/1.1 request without hostname (see RFC2068 section 9, and 14.23): </P>
    </BODY></HTML>

    La richiesta con il nuovo protocollo HTTP 1.1 fornisce molte più informazioni. Si articola su diverse linee. Le linee aggiunte permettono la trasmissione di informazioni più precise ed aumentano la qualità della comunicazione.
    Questa versione 1.1 del protocollo è stata rigorosamente seguita del team di sviluppo dell'Apache, in quanto con le nuove specifiche ci sono parecchie funzionalità nuove: autenticazione, siti virtuali, diversi siti che condividono lo stesso indirizzo IP, e molto altro...


    Esempio :

    GET / HTTP/1.0< return >
    Host:www.linuxfocus.org< return >
    < return >
    [...]

    Come succede con la gran parte dei sistemi clients-servers, quando il server riceve una richiesta :

    1. genera un sub-processo per rispondere alla richiesta ;

    2. mentre gli altri processi continuano ad “ascoltare” sulla porta 80 per una nuova richiesta.

    3. Il sub-processo risponde alla richiesta.

     

    Funzionalità

    Il principio di base è che un server web può solo spedire una singola risposta ai clients. Il client vede solo ciò che spedisce come richiesta e riceve la risposta.

    Il web server è un'interfaccia tra il client web che richiede un URL (Uniform Request Locator) - questa abbreviazione non è la sola usata, potete anche trovare URI, URN, che sono a grandi linee la stessa cosa - e il sitema operativo Apache che ci lavora dietro. Il client web spedisce la sua richiesta ed il server risponde con la pagina che corrisponde all'URL richiesto.

    Alcune richieste spedite dal client non possono essere elaborate direttamente dal server. Il server può eseguire alcuni programmi per elaborare correttamente la pagina per poi inoltrare la risposta: è in questo modo che funzionano gli scripts CGI (Common Gateway Interface).

     

    Conclusione

    Per capire come lavora il server Apache provate a telnettare su diversi servers HTTP. In questo modo potrete vedere che server web gira su quei siti nella risposta che comunica il server (attraverso il comando GET, N.d.T.)

 

Commenti per questo articolo

Ogni articolo ha la sua pagina dei commenti. Su questa pagina possibile inviare un commento o leggere i commenti degli altri lettori:
 Pagina dei commenti 

Pagine web mantenute dal Team degli Editori di LinuxFocus
© Charles vidal
LinuxFocus.org 2000

Clicca qui per segnalare un errore o per inviare un commento a Linuxfocus
Informazioni sulla traduzione:
fr -> -- Charles vidal
fr -> en Frédéric Raynal
fr -> en Alexandre Abbes
en -> it Paolo Conti

2000-05-10, generated by lfparser version 1.5