Comment ça marche ?
Le principe de base est une connexion de type client/serveur : un client (le navigateur) se connecte sur un serveur, émet une requête et le serveur répond. La connexion est une simple ouverture de socket TCP/IP généralement sur port 80, mais on utilise aussi de temps en temps le port 8080 (pour les connexions sur proxy, par exemple).HTTP est un protocole relativement simple. Tellement simple en fait que l'on peut communiquer soi-même directement avec les serveurs web. Il suffit pour cela de se connecter à un serveur par telnet et de taper les commandes à la main.
Les versions de HTTP
HTTP en est donc à la version HTTP/1.1. Avant cette version, il y en a eu 2 autres :HTTP/0.9 et HTTP/1.0. HTTP/1.0 est certainement la version la plus répandue sur Internet. Lorsque l'on donne les versions du protocole HTTP, on donne "HTTP/" suivi de la version du protocole.Lorsque l'on se connecte à un serveur, on doit a priori lui dire dans quelle version de HTTP on veut lui parler. Par défaut, si on ne dit rien, on utilise HTTP/0.9. C'est ce qui s'est passé dans l'exemple ci-dessus. Lorsque l'on demande à utiliser une version de HTTP que le serveur n'implémente pas, ce dernier renvoie en premier la version de HTTP qu'il va utiliser pour le reste de la transmission. C'est finalement au client de s'assurer qu'il va comprendre ce que va répondre le serveur.
Les requêtes
Une requête est ce qu'on demande au serveur. Dans le premier exemple, il s'agissait d'une requête GET, utilisée pour obtenir un document. Dans le deuxième exemple, il s'agissait d'une requête HEAD qui permet de ne récupérer que la partie en-tête de la réponse à une requête GET (nous verrons que cela est fort utile pour ne pas charger inutilement le réseau).Les différentes requêtes
Les requêtes HTTP se font avec ce qu'on appelle des méthodes. Voici les différentes méthodes possibles, avec la version de HTTP dans laquelle elles sont apparues :requête | version HTTP | description |
---|---|---|
GET | HTTP/0.9 | obtient un document |
HEAD | HTTP/1.0 | obtient l'en-tête de la réponse |
POST | HTTP/1.0 | envoie du contenu au serveur |
PUT | HTTP/1.1 | demande au serveur d'enregistrer la ressource envoyée |
DELETE | HTTP/1.1 | permet d'effacer un fichier sur le serveur |
TRACE | HTTP/1.1 | permet de contrôler la requête reçue par le serveur |
CONNECT | HTTP/1.1 | mot réservé pour les proxies permettant de créer des tunnels |
OPTIONS | HTTP/1.1 | liste les options possibles pour une ressource donnée |
Format des requêtes
Les requêtes n'ont un format bien précis que depuis HTTP/1.0.Pour HTTP/0.9, la seule requête envisageable est celle vue dans le premier exemple :
GET http://www.themanualpage.org/http/hello.txt
Réponse du serveur
En HTTP/0.9, la réponse n'est constitué que de la réponse (page HTML, image...), et rien d'autre.En revanche, à partir de HTTP/1.0, la réponse du serveur a le format qu'une requête, en se composant en 2 parties (hormis la toute première ligne) : l'en-tête de la réponse et le corps de la réponse (au sein d'un réponse donnée, ce corps est également appelé corps de l'entité). L'en-tête contient des informations (de nouveau précisées avec des directives) sur la réponse et l'entité renvoyée. Par exemple, le serveur donne le format de la ressource renvoyée, sa taille... Le corps de l'entité est le résultat même de la requête.
La première ligne de toute réponse précise le statut de la réponse. Le statut sert à préciser la manière dont s'est passé le traitement de la requête (si elle a abouti ou pas, par exemple).
Pour plus de renseignement, voir la réponse du serveur en HTTP/1.0
Ce qu'est ou n'est pas HTTP
HTTP est de plus en plus utilisé. Pourquoi ? Parce qu'il est simple et modulaire et est très facile à contrôler. Il faut cependant bien comprendre ses limitations provenant de son fonctionnement intrinsèque : le modèle requête-réponse sans connexion permanente :- Le modèle requête-réponse : il faut bien comprendre les rôles du client et du serveur HTTP et ce que chacun peut faire (i.e. quelles technologies chacun peut comprendre et utiliser). Il faut se rappeler que c'est toujours le client qui est l'initiative des échanges avec le serveur. Deux conséquences : si on veut que le serveur envoie quelque chose au client, il faut d'abord que ce dernier contacte le serveur, et sans mécanisme spécifique particulier, le serveur n'exétera rien sans sollicitation de la part d'un client.
- Pas de connexion permanente : cela implique une sorte de fonctionnement en mode déconnecté d'un point de vue applicatif : d'une requête à l'autre, le serveur ne reconnaît pas le client. Difficile dans ces conditions de faire avec HTTP ce qu'on peut faire avec un système transactionnel ou client-serveur traditionnel tel qu'AS/400. C'est pour répondre à ce problème qu'on peut être amené à utiliser les cookies