TP1 Applications web M1 Miage 2010-2011 : étude du protocole HTTP

De $1

Version de 01:25, 25 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Introduction

Ce TP a pour but de vous faire comprendre la nature du dialogue entre un navigateur et un serveur web. Le langage d'échange est le protocole HTTP. Il est très simple d'écrire un serveur web minimaliste, vous allez vous en rendre compte en simulant ce qu'envoie un navigateur web à un serveur à l'aide de divers outils tels que telnet ou netcat (commande "nc" de unix).

Outils nécessaires à ce TP

Si vous êtes sous Linux, vous n'avez théoriquement besoin de rien, toutes les commandes sont disponibles. Si vous êtes sous windows, vous commencerez par installer le package Cygwin, qui pertmet d'installer sur une machine Windows un shell unix ainsi qu'une grande partie des commandes disponibles sous ce système. Cygwin est non seulement une formidable boîte à outils mais il vous permettra également de vous faire la main avec les commandes Unix que vous n'avez généralement pas l'habitude d'utiliser et qui sont pourtant beaucoup plus puissantes que ce que propose l'ancêtre DOS. Ajoutons que la maîtrise des commandes Unix fait partie des prérequis pour certains stages et embauches (parlez-en aux M2 qui sont partis en stage chez Google à New-York cette année, ou aux stagiaires IBM/SAP).

Installation de cygwin sous windows :

  1. Aller sur cygwin.com, localisez le lien vers setup.exe (pour les plus fainéants : http://cygwin.com/setup.exe),
  2. Dans les packages proposés, il faut impérativement sélectionner : inetutils, nc, openssh, wget (cherchez-les et cliquer sur "skip" pour qu'ils soient installés,
  3. Terminez l'installation.
  4. Ouvrez une fenêtre cygwin (vous devriez avoir l'icône sur le bureau), et vérifiez que les commandes telent, nc, ssh, wget sont bien installées.

Jouons au client HTTP avec la commande telnet

Vous allez envoyer des requetes entièrement écrites à la main au serveur, en d'autres termes vous allez simuler un client HTTP. Pendant cette séance vos références principales seront les RFCs du protocole HTTP:

Pour réaliser cette première étape, vous aurez besoin d'un terminal (xterm, gnome-terminal ou konsole sous Linux, cygwin sous windows). Lancez le terminal de votre choix et au prompt taper la commande :

telnet www:unice:fr 80

Le serveur vous répondra :

# telnet www.unice.fr 80
Trying 134.59.1.71...
Connected to www.unice.fr.
Escape character is '^]'.

Vous pouvez alors commencer à envoyer des requêtes au serveur, par exemple :

GET / HTTP/1.0
Accept: www/source
Accept: text/html

 Terminez en tapant deux fois sur la touche Entrée (c'est ainsi qu'on termine une requête HTTP).

Le serveur vous va vous retourner une réponse et se déconnecter. Pour envoyer d'autres commandes, vous devez vous reconnecter avec telnet. Le protocole HTTP est par défaut un protocole "non connecté", je te parle, tu réponds, fin de transmission !

Question 1 Quelles sont les caractéristiques du serveur web de l'université ?

Question 2 Quelles informations tirez-vous de la première réponse du serveur?

Question 3 Essayez la requête suivante sur portail.unice.fr :

GET /jahia/jsp/index.jsp HTTP/1.0
Accept: www/source
Accept: text/html
Host: portail.unice.fr

Hmmm la réponse est bizarre non ? 

Question 4 : qu'en déduisez-vous ?

Question 5 : on veut afficher comme réponse telnet le contenu HTML de la home page du portail de l'université ! Uniquement en vous aidant des réponses à vos requêtes via telnet (vous pouvez tester en omettant les lignes de la requête commençant par Accept et Host), quel est l'URL final qu'il faut envoyer dans le GET pour avoir le source de la vraie page du portail de l'Université ? Alors, d'après-vous, est-ce que le navigateur web fait le même travail que vous venez de faire lorsqu'il interroge portail.unice.fr ?

Jouons au serveur HTTP maintenant avec la commande nc

On va maintenant changer de rôle et jouer au serveur HTTP, pour cela on va utiliser la commande nc (nc pour netcat: un cat sur le réseau. Pour plus d'informations sur cette commande, sous Linux, taper "man netcat", ou la version en ligne : http://www.manpagez.com/man/1/nc/) :

usage: nc [-46DdhklnrStUuvzC] [-i interval] [-p source_port]
          [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_version]
          [-x proxy_address[:port]] [hostname] [port[s]]

Nc vous permet de simuler un serveur en utilisant l'option -l, par exemple pour lancer un serveur qui écoutera sur le port 12345, vous pouvez utiliser la commande suivante:

nc -l localhost 12345 (sous linux) ou
nc -l -p 12345 localhost (sous windows/cygwin)

... et pour vous connectez à ce serveur vous pouvez utiliser (dans une autre fenêtre) la commande:

telnet localhost 12345

Maintenant que vos deux fenêtres sont ouvertes, dans la fenêtre telnet, tapez des trucs et terminez par Entrée. Que voyez-vous dans la fenêtre "serveur", celle où la commande nc a été utilisée ?

Bon, si tout va bien vous devriez voir l'echo de ce que vous avez envoyé. Telnet est un "client" qui parle à nc qui est un "serveur". Voyons maintenant ce qui se passe lorsque le client est un navigateur web !

Question 6 : connectez-vous au serveur en utilisant le navigateur de votre choix, quelles sont les informations que votre navigateur envoie aux serveurs web sur lesquels vous vous connectez ?

Question 7 : Répondez à la requête du navigateur de sorte à afficher une page comme dans la figure suivante :