Une petite illustration :

<img src="img/tuto/HTTP.png" alt="HTTP" />

- HTTP est un protocole client-serveur à requêtes et réponses. Il est *asymétrique* : c'est le client qui "tire" (pull) de l'information du serveur, en émettant une requête à laquelle le serveur répond.
- HTTP est un protocole *stateless*, sans état. La requête courante ne "sait" pas ce qui s'est passé lors des requêtes précédentes (ce qui peut te faire te demander *comment* on gère l'authentification, s'il n'y a pas d'état persistant).
- HTTP permet au client de "négocier" avec le serveur un certain type de données demandé (exemples : HTML, JSON, XML).

Allez, tu vas mettre les "mains dans le cambouis" maintenant ! Tu vas apprendre à envoyer des requêtes à un serveur HTTP manuellement, *sans passer par le navigateur* !!

J'espère que tu as gardé ouverte la fenêtre de terminal, avec le mini-serveur vu au point n°1. Ouvre un deuxième onglet ou fenêtre de terminal, et saisis :

    telnet 127.0.0.1 8081

La commande telnet existe normalement sous tous les systèmes. Elle permet de communiquer directement avec un serveur, quel qu'il soit : serveur web, serveur mail sortant (SMTP), serveur mail entrant (IMAP, POP3), etc.

Les arguments qu'on lui passe sont :
- l'hôte sur lequel tourne le serveur qu'on veut contacter. Ici on utilise l'IP locale qui est *toujours* `127.0.0.1`, quel que soit  ton OS.
- le *port* auquel ce serveur est lié, et sur lequel il *écoute*.

Les ports sont un peu comme des "canaux" de communication. Quand tu envoies un courrier à un organisme de grande taille, tu vas préciser sur l'enveloppe le service auquel tu t'adresses, pour que les gens qui reçoivent ce courrier puissent savoir à qui le distribuer.

C'est le rôle des ports. Sur une même machine *physique* (un serveur au sens ordinateur), plusieurs *applications* ou *processus* serveurs peuvent fonctionner : si tu loues un serveur privé chez OVH ou autre, tu peux y faire tourner un serveur web, des serveurs mail entrants, un serveur mail sortant, etc. &Agrave; chacun d'eux est assigné un port, et ceux-ci sont standardisés, du moins pour ceux *en-dessous de 1024* :

- Serveur web : ports 80 (HTTP non sécurisé) et 443 (HTTPS ou HTTP sécurisé).
- Serveur mail sortant (SMTP) : port 25 (non sécurisé) ou 587 (sécurisé).
- serveur SSH : port 22.

Ici le mini-serveur web tourne sur un port non-standard, 8081. C'est tout à fait permis: les ports à partir de 1024 sont libres pour un usage personnalisé. Le mini-serveur n'écoute pas sur le port 80, pour la bonne raison qu'il est fort possible que tu aies *déjà* un serveur qui écoute sur ce port ! C'est le cas si tu as WAMP/MAMP/LAMP installé et actif : Apache écoute sur 80, et *un seul* processus peut écouter sur un port à un instant donné.