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