Ceci est une ancienne révision du document !


Transcription du cours de skateinmars pour u-classroom.

Qu'est-ce que le Web ?

Le Web est (de manière simple) un réseau composé de l'ensemble des sites Internet disponibles publiquement, reliés entre eux par des hyperliens. Un site Internet (ou site Web) est quand à lui un ensemble de pages Web, liées entre elles.

Un site web a une adresse, comme celle du site Ubuntu-fr : http://ubuntu-fr.org. La page Web principale de ce site propose des liens hypertextes vers d'autres pages et d'autres sites, par exemple : http://ubuntu-fr.org/telechargement.

Attention à ne pas faire d'amalgame entre Web et Internet. Le salon IRC sur lequel s'est déroulée cette séance utilise Internet, pas le Web.

HTTP et Navigation

Pour accéder à un site web, il vous faut utiliser un client Web, appelé communément Navigateur, par exemple : firefox, lynx, opera, konqueror, w3m…

Telnet

C'est la qu'intervient le protocole HTTP. Voyez par exemple le site suivant http://test.skateinmars.net/. Visitez le avec votre navigateur et vous verrez une page toute simple qui s'affiche. Comment votre navigateur peut-il afficher cette page ? Il l'a en fait demandée au serveur qui s'occupe de ce site.

Faisons la même chose à la main. Ouvrez une console et saisissez (après avoir installé le paquet telnet si nécessaire) :

telnet test.skateinmars.net 80

Vous verrez s'afficher :

Trying 82.228.105.196...
Connected to skateinmars.net.

Vous êtes donc connecté au serveur identifié par le nom skateinmars.net et l'adresse IP 82.228.105.196. Le serveur attend une action de votre part. Saisissez :

GET / HTTP/1.1
Host: test.skateinmars.net

Puis 2 fois <entrée> Vous voyez alors s'afficher du texte HTML. C'est la même page que le navigateur vous a affiché précédemment. La connexion est coupée après l'affichage du texte.

Ce texte que vous pouvez voir, c'est le même que vous avez vu dans votre navigateur tout à l'heure : c'est une page Web. Verifiez dans votre navigateur en regardant la source de la page : bouton droit de la souris, "Code source de la page" sous Firefox.

Vous venez donc d'utiliser le protocole HTTP. HTTP est un protocole de communication. C'est à dire une spécification qui définit comment 2 machines doivent dialoguer entre elles. HTTP est le protocole choisi pour le Web. Il y a en d'autres pour d'autres usages, FTP par exemple. Vous pouvez d'ailleurs reconnaître le protocole dans l'adresse d'une page web : http:bla === Histoire === HTTP veut dire Hypertext Transfer Procotol, soit « protocole de transfert hypertexte ». Hypertexte, en raison des liens hypertextes qui pointent vers les ressources accessibles par HTTP. On utilise donc HTTP à chaque fois que l'on visite une page Web. HTTP est apparu dans les années 89/90, sur une proposition de Tim Berners-Lee, aujourd'hui président du W3C, l'organisme qui produit des recommandations qui servent de standards pour le Web (XML, HTML, CSS entre autres). Comme pour de nombreux protocoles, il en existe plusieurs versions. La première version est appelée HTTP/0.9, et la version 1.0 est devenue un standard IETF en mars 1996. Elle est definie dans la RFC 1945. La norme actuelle est HTTP/1.1 et elle est décrite dans les RFC 2616 et 2068. === Le protocole === Comme vous avez pu le remarquer lors de l'utilisation de telnet, HTTP utilise par défaut le port 80. Votre navigateur le sait et c'est pour cela que vous n'avez pas à taper http://www.google.fr:80/ (vous pouvez néanmoins essayer, ca marche). Quand on utilise HTTP, il faut définir deux choses essentielles : la ressource sur laquelle on agit, représentée par l'url, "/bob" par exemple, puis la méthode à utiliser. Il y a plusieurs méthodes disponibles, la plus utilisée étant GET. C'est celle que les navigateurs utilisent pas défaut quand vous cliquez sur un lien ou tapez l'adresse d'un site à consulter. Une autre méthode, très utilisée, et la méthode POST. Elle est souvent utilisée avec des formulaire, pour envoyer un message sur un forum par exemple. Ceux qui ont deja touché à PHP ou au développement web connaissent ces deux méthodes, il y en a d'autres mais elles sont beaucoup moins courantes : HEAD, PUT, DELETE, etc. Reprenons telnet : telnet test.skateinmars.net 80 GET /test/test.txt HTTP/1.0 Host: test.skateinmars.net Connection: close Vous obtenez la ressource test/test.txt, qui est un simple fichier texte, après avoir utilisé la méthode GET. Vous avez également utilisé HTTP en version 1.0. Recommencez maintenant ces étapes mais en terminanat par : Connection: keep-alive Vous pouvez voir que telnet reste connecté au serveur et vous pouvez ainsi envoyer une autre requete. Analysons un peu plus ce que l'on vient de faire : * sur la première ligne, on choisit la méthode à utiliser (GET), l'adresse de la ressource (/test/test.txt), et la version de HTTP à utiliser * sur la deuxième ligne on choisit l'hôte à contacter. C'est obligatoire dans la norme HTTP supérieure à 0.9, et très utile pour un serveur qui hébergerait plusieurs sites sur la même IP * sur la troisième ligne on a défini une option supplémentaire que l'on avait ignoré la première fois. L'option Connection permet de spécifier si l'on veut rester connecté au serveur après avoir recu la ressource ou si l'on souhaite se déconnecter (on peut voir la différence avec keep-alive). Il y a bien d'autre options disponibles, chacune étant un "en-tête". Regardons maintenant les quelques lignes renvoyées par notre action : * HTTP/1.1 200 OK Ici on peut voir le protocole utilisé, et le code de retour. Le code de retour est très important, il nous permet de savoir si la requête a reussi ou non. Ici le code est 200, soit OK. Le code 200, vous le recevez à peu prêt tout le temps, il signifie que la requête a réussi. Bien sur vous ne le voyez pas dans votre navigateur puisque celui-ci affiche la ressource reçue (ce qui vous interresse plus d'habitude que de savoir simplement si elle a été recue !). Si vous êtes curieux vous pouvez essayer un telnet sur une ressource non existante, et vous verrez le code 404 bien connu qui signifie que la ressource n'existe pas. Les codes d'erreur en 2XX sont des codes de réussite, en 3XX ce sont des redirections, en 4XX des erreurs de requête et en 5XX des erreurs du serveur. Une liste de tous les codes est bien sûr disponible dans la RFC. * Server: Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch7 proxy_html/2.5 mod_ssl/2.2.3 OpenSSL/0.9.8c C'est simplement le nom et les informations sur le serveur qui vous a répondu. Ici Apache version 2.2.3. On peut configurer son serveur pour cacher ces options et éviter les crackers qui recherchent une version précise d'apache vulnérable à certaines failles (notez qu'il vaut mieux corriger la faille dans ce cas ;). * Last-Modified C'est la date à laquelle la ressource a été modifiée pour la dernière fois. * ETag Etag représente un identifiant du fichier. Ces deux options permettent au navigateur de les comparer avec les fichiers qu'il a dans son cache pour ne pas retélécharger inutilement un fichier qu'il a déjà demandé auparavant. * Content-Length Content-Length définit la taille du contenu que le serveur vous envoie, et * Content-Type** C'est le type MIME du contenu (texte, image, etc.). Notez qu'il est inutile de se servir de ETag et Last-Modified si l'on télécharge tout de même la ressource ; on peut donc utiliser HEAD au lieu de GET pour demander ce genre d'informations.

  • projets/ecole/apache.1192289000.txt.gz
  • Dernière modification: Le 13/10/2007, 17:36
  • (modification externe)