Drop Zone City
www.drop-zone-city.com

Accueil > Base Documentaire > Informatique > Securité > Réseau

HTTP - Fonctionnement

6678 lecture(s)

Publié le :
samedi 26 janvier 2002

Par Fabrice

Format imprimable
Format PDF

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. Voici un exemple (il suffit de taper ce qui est en gras ; [CR] signifie qu’il faut sauter une ligne) :

$ telnet www.themanualpage.org 80[CR]
Trying...
Connected to web.pro.proxad.net.
Escape character is '^]'.
GET http://www.themanualpage.org/http/hello.txt[CR]
Hello
Connection closed by foreign host.

En tapant GET http://www.themanualpage.org/http/hello.txt, on demande le document /http/hello.txt au serveur www.themanualpage.org, et ce dernier l’a renvoyé. C’est la base de HTTP : on tape une requête avec des "mots" simples, et le serveur répond également derrière avec des "mots" simples et renvoie le réultat de la requête.

Internet Explorer, Netscape et tous les autres navigateurs, lorsque vous tapez une URL, ne font que parler aux serveurs de cette façon.


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. Exemple :

$ telnet www.themanualpage.org 80
Trying...
Connected to web.pro.proxad.net.
Escape character is '^]'
HEAD http://www.themanualpage.org/http/hello.txt HTTP/1.0

HTTP/1.1 200 OK
Date: Thu, 14 Oct 1999 06:43:02 GMT
Server: Apache/1.3.6 LV/LM-1.3 (Unix) PHP/3.0.9
Last-Modified: Sat, 08 Feb 1997 15:55:03 GMT
ETag: "afc0-8-32fca1d7"
Accept-Ranges: bytes
Content-Length: 8
Connection: close
Content-Type: text/plain

Connection closed by foreign host.

On s’aperçoit que la réponse du serveur est plus compliquée qu’avant, et qu’elle contient surtout des données supplémentaires. Ces données supplémentaires, aussi bien pour le client que pour le serveur, sont précisées par ce qu’on appelle des directives. Par exemple, "Content-Type :" est une directive qui précise le format de la ressource renvoyée (ici, du texte brut).


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

La méthode figure forcément sur la première ligne de la requête.

Format des requêtes
Les requêtes n’ont un format particulier 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

Pour HTTP/1.0 et au-delà, les requêtes sont composées de 2 parties distinctes (Si on élimine la première ligne constituée uniquement de la méthode) : l’en-tête et le corps de la requête (Au sein d’une requête donnée, ce corps est également appelé corps de l’entité). L’en-tête permet de préciser la requête en ajoutant des directives (qui demande la ressource, type de navigateur...). En toute rigueur, cet en-tête est indispensable, mais comme HTTP/0.9 en est dépourvu, ce n’est pas obligatoire pour HTTP/1.0. Le corps de la requête, en revanche, figure rarement dans une requête : il n’est là que lorsque le client envoie des données au serveur en utilisant la méthode POST ou PUT.

Pour plus de renseignement, voir les en-têtes de HTTP/1.0.

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.1.


Article du site www.themanualpage.org

Copyright © www.themanualpage.org

Ce document est soumis aux conditions décrites dans la licence GNU FDL. Permission vous est donnée de distribuer, modifier des copies de ce document tant que cette notice apparaît lisiblement.


Documents liés

rfc2616.txt
texte - 412.3 ko


Tracback(s)

Pour faire un trackback :
http://www.drop-zone-city.com/spip_tb.php?id_article=101


Dans la même rubrique

Autres articles :

Citation du Jour

« Nulle pierre ne peut être polie sans friction, nul homme ne peut parfaire son expérience sans épreuve. »
Confucius

Toutes les citations

Newsletter du site

^ Haut

Accueil | Kiosque | Plan du site | Contact | Newsletter du site | Syndication | Derniers sites web ajoutés

Edition | CV : formateur, consultant

Mentions légales - Copyright © Drop Zone City 2004.

Site développé avec SPIP, un logiciel libre écrit en PHP sous licence GNU/GPL.




W3C Link Checker | Conformité W3C CSS2 / XHTML 1.0 (Trans.)

Pub : consultant, formateur et concepteur Web à Montpellier | FormeOLibre.com