Questo documento è disponibile in: English Castellano Deutsch Francais Italiano Nederlands Russian Turkce |
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: |
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.
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 ;-).
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.
La richiesta :
Questa è una linea di testo divisa in 3 parti :
[tipo di richiesta]
[URL]
[Protocollo usato]
Le richieste possibili sono: GET, POST, HEAD, PUT, DEL, TRACE.
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)
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
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 :
genera un sub-processo per rispondere alla richiesta ;
mentre gli altri processi continuano ad ascoltare sulla porta 80 per una nuova richiesta.
Il sub-processo risponde alla richiesta.
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).
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.)
|
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:
|
2000-05-10, generated by lfparser version 1.5