original in fr Charles vidal
Président d'un lug gastronomique à Paris. Il aime la philosophie GNU et Open Source, car c'est dans le même ordre d'idée que le partage de connaissances. Il aimerait avoir du temps pour jouer du Saxophone.
Le serveur et le client web communiquent grâce au protocole HTTP (Hypertext Transfer Protocol ) Nous en sommes à la version 1.1 de ce protocole , on parle alors HTTP 1.1
Ce protocole peut se décomposer en deux grandes sous-parties : La requête, et la réponse du serveur.Basiquement, elle se compose d'une ligne correspondant à la demande du client, celle-ci peut être décomposée en trois sous-parties.
La réponse du serveur se compose d'un entête et du corps de la réponse ( qui varie suivant le type de requête bien sûr ).
>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> |
Analysons le résultat :
Tout d'abord la première ligne indique le protocole utilisé pour la réponse, puis le
code de retour du serveur (les codes supérieurs à 400 indiquent une erreur).
Puis la date , le type de serveur, la date de dernière modification (ceci permet au client web de savoir si ce qu'il a dans son cache est valide ou non).
Content-Length indique la taille du document envoyé (il n'y a pas de Content-Length pour des scriptes CGI), le Content-Type donne à votre client WEB le type MIME de ce qui est envoyé (texte , html, images ...)
Je n'ai pas tout décrit car certaines choses me sont inconnues. :)
>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 |
>telnet www.linuxfocus.org 80 Trying 195.53.25.18... Connected to nova.linuxfocus.org. Escape character is '^]'. GET / < return > < return > |
Avec la commande telnet vous vous êtes connecté à la machine www.linuxfocus.org (adresse IP 195.53.25.1) sur le port 80. Port habituel pour ce protocole. Le serveur de l'autre coté était en attente d'une requête. Vous avez tapé GET / et deux fois retour chariot.
Pourquoi les deux retours chariots ? , et bien cela indique la fin de votre requête (vous avez envoyé une ligne vide) . Le serveur alors vous répond en vous envoyant le fichier demandé ( index.html ).Puis à la fin du transfert , la connexion est fermée. Comme vous pouvez le constater le langage entre le navigateur web et le serveur est simplissime. Mais attention , cela se complique avec les versions de HTTP :
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"> ....Mais finalement avec le 1.1 on obtient :
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>
Effectivement avec le nouveau protocole HTTP/1.1 la requête necessite plus d'information. Le requête doit comprendre plusieurs lignes. Cet ajout permet de transmettre au serveur plus d'information pour de meilleurs échanges.
Ce protocole est à la version 1.1 , et les gens d'apache ont respecté à la lettre les spécifications. Le nouveau protocole offre un grand nombre de fonctionnalités nouvelles: Authentification Site virtuel ( plusieurs sites peuvent avoir une seule adresse IP voir nslookup). Exemple:GET / HTTP/1.0< return > Host:www.linuxfocus.org< return > < return > [...]
Comme la plupart des programmes client-serveur, le serveur , lorsqu'il reçoit une requête,
Le serveur web est l'interface entre le client web demandant une URL (Uniform Request Locator) ce terme n'est pas le seul il y a aussi URI, URN mais la n'est pas notre propos, et le système où se trouve ce serveur.
Effectivement, le client WEB lui envoie sa requête, et le serveur lui retourne, les pages html correspondantes à l'URL demandée,le client demandera les images se trouvant dans celles ci, le serveur lui enverra de même. Mais il peut suivant la requête, aussi faire l'interface avec quelques programmes du système , choisis ou écrits par l'administrateur du site (appelé aussi WebMaster) ; ces programmes sont appelés les scripts CGI ( Common gateway interface ) et retourne une page html. Nous verrons par la suite que l'on peut ajouter de nouvelles fonctionnalités au serveur WEB par la technique des modules. Voila les fonctionnalités de base d'un serveur HTTPD.
Essayez pour bien comprendre ce que fait apache, les différents tests avec telnet.
Nous verrons dans les prochains articles la configuration, les modules d'apache (avec les virtual hosts, certains modules permettant de dynamiser vos pages HTML ( php , perl etc ... ) , le module SSL ( Secure Socket Layer ) ,et pour finir la compilation d'Apache.