Les échanges entre un serveur et un client sur Internet doivent se conformer à des règles communes, afin que chacun puisse se comprendre. Les hommes (et femmes) communiquent entre eux par l'intermédiaire d'une langue commune comme le français, l'anglais, ou encore le mandarin. De la même façon, les différents intervenants du web se conforment à un protocole de communication appelé HTTP (HyperText Tranfer Protocol 1.0 ou 1.1) dont les normes sont édictées dans la RFC 1945 et RFC 2616.

Ainsi, lorsqu'un client à l'instar des navigateurs Internet, demande l'affichage d'une page Web, en fait une requête HTTP est transmise à un serveur qui retournera une réponse HTTP adéquate qui sera visualisable dans le navigateur.

Les requêtes et les réponses HTTP sont composées d'un entête et éventuellement d'un corps.

Le corps HTTP est soit une combinaison de paire clé/valeur pour une requête soumise par un client, soit un contenu (une page HTML par exemple) pour une réponse envoyée par un serveur.

domaine=laltruiste.com&titre=Le+guide+des+langages+web
//ou
<html>
    <body>
        <p>Un contenu quelconque...</p>
    </body>
</html>

La combinaison de paires clé/valeur résulte des champs d'un formulaire HTML que l'utilisateur aurait rempli par le biais de son navigateur Internet.

<form method="POST" 
                name="formulaire" 
                action="http://serveur.com/script.cgi">
    <label>Domaine :</label>
        <input type="text" name="domaine" value="laltruiste.com"/>
    <label>Titre :</label>
        <input type="text" name="titre" value="Le guide des langages web"/>
    <input type="submit" name="soumission" value="Soumettre"/>
</form>

Après soumission d'un tel formulaire, l'ensemble des champs sont combinées de telle manière que les attibuts name et value forment des paires séparées par un caractères &.

Cette combinaison peut être :

  • soit concaténée à l'adresse URL de l'attribut action si la méthode de transmission du formulaire (attribut method) est GET, dans ce cas, la combinaison se dénomme une chaîne de requêtes,
  • soit composée le corps d'une requête HTTP si la méthode de transmission est POST.
Méthode GET (chaîne de requêtes) 
http://serveur.com/script.cgi?domaine=laltruiste.com
        &titre=Le+guide+des+langages+web&soumission=Soumettre

Méthode POST (corps HTTP) :
domaine=laltruiste.com&titre=Le+guide+des+langages+web&soumission=Soumettre

Un entête HTTP est composée d'un certain nombre de lignes.

La première ligne, appelée parfois prologue, d'un entête HTTP pour une requête, regroupe la méthode de transmission (ex. GET et POST), le chemin de la ressource sollicitée sur le serveur (ex.: http://site.com/script.cgi ou /script.cgi), et la version du protocole(ex.: HTTP/1.0).

POST http://site.com/script.php HTTP/1.1

En ce qui concerne une réponse HTTP, le prologue est constitué de la version du protocole (ex.: HTTP/1.x), du code de statut (ex.: 200 ou 404) et de sa decription (ex.: OK ou NOT FOUND).

HTTP/1.x 200 OK

Les lignes suivantes sont décomposées en un nom d'entête HTTP et une valeur associée. Les valeurs des noms d'entêtes sont définies par rapport aux caractéristiques du client HTTP ou du serveur (ex.: encodage de caractères, agent utilisateur, langages acceptés) et celles du corps HTTP (ex.: type MIME, encodage, longueur du contenu).

//Requête HTTP
GET /accueil.php?compteur=1&evolution=5 HTTP/1.1
Host: www.laltruiste.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; fr) Gecko/20040113
Accept: text/xml,application/xml,application/xhtml+xml,
            text/html;q=0.9,text/plain;q=0.8,image/png,
                    image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: fr,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.laltruiste.com/accueil.php

//Réponse HTTP
HTTP/1.x 200 OK
Date: Tue, 01 Mar 2005 11:42:27 GMT
Server: Apache/1.3.33 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7e DAV/1.0.3 
            mod_gzip/1.3.26.1a AuthMySQL/2.30 PHP/4.3.10
X-Powered-By: PHP/4.3.10
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 5357

//Contenu HTML...

Les lignes d'un message HTTP son systématiquement terminées par un caractère de retour charriot (Carriage Return : \r) suivi d'un caractère de fin de ligne (Line Feed : \n). De plus, l'entête est séparé du corps par un double saut de lignes (CRLF + CRLF).

Sommaire