I. Généralités▲
I-A. Présentation▲
Il s'agit d'un protocole reposant sur un unique échange initié par le client. Il est synchrone : le serveur ne peut commencer à répondre avant que le client ait fini d'envoyer la requête.
Il en existe trois versions : 0.9 (1991), 1.0 (février 1997) et 1.1 (octobre 2000). La version 0.9 est complètement obsolète et nous ne l'étudierons pas ici. De nos jours, la version 1.0 est très rarement utilisée ; elle est d'ailleurs obsolète. Les principaux changements entre les versions 1.0 et 1.1 sont l'ajout de deux types de requêtes ainsi que la possibilité d'héberger plusieurs sites Web sur un même serveur dans la version 1.1.
L'échange entre le client et le serveur se fait en mode texte. Le charset généralement utilisé est l'US-ASCII sur 8 bits. Il est cependant possible que cet encoding soit modifié selon le client ou le serveur.
I-B. Structure▲
Les requêtes et les réponses sont bâties sur le même modèle :
{Ligne d'introduction}{SEP}
{En-têtes séparés par des {SEP} }
{SEP}{SEP}
{Corps}
En théorie, le seul élément capable de différencier une requête d'une réponse, c'est la Ligne d'introduction.
En fait, certains en-têtes sont plutôt caractéristiques des requêtes, tandis que d'autres sont plutôt utilisés pour les réponses. Les requêtes ont cette forme :
{Nom}{HSEP}{Valeur}
Le séparateur HSEP représente la combinaison deux-points + espace ": ". Le protocole HTTP définit un ensemble d'en-têtes standard. Des en-têtes supplémentaires peuvent être ajoutés, à la condition que leur nom commence par "X-".
I-C. Caractères interdits ou réservés▲
Certains caractères sont interdits ou réservés à certains endroits du message :
nom du caractère |
code US-ASCII |
notation courante |
réserves et interdictions |
---|---|---|---|
retour chariot |
0x0D (13) |
\r |
Il fait partie du séparateur SEP. |
nouvelle ligne |
0x0A (10) |
\n |
Il fait partie du séparateur SEP. |
point d'interrogation |
0x3F (63) |
? |
Il est utilisé à certains endroits de la Ligne d'Introduction. |
égal |
0x3D (31) |
= |
Il est utilisé à certains endroits de la Ligne d'Introduction. |
esperluette |
0x26 (38) |
& |
Il est utilisé à certains endroits de la Ligne d'Introduction. |
dièse |
0x23 (35) |
# |
Il est utilisé à certains endroits de la Ligne d'Introduction. |
pourcentage |
0x25 (37) |
% |
Il est utilisé dans le cadre de l'URL-Encoding. |
deux-points |
0x3A (58) |
: |
Ils sont utilisés dans les en-têtes. |
espace |
0x20 (32) |
' ' ou " " |
Il est utilisé dans la Ligne d'Introduction et les en-têtes. |
Le séparateur SEP correspond en fait au duo "\r\n" (Carriage Return, New Line : CRLF)
I-D. L'URL-Encoding▲
L'URL-Encoding permet d'insérer les caractères réservés, ou des caractères accentués, dans certaines parties des messages HTTP.
Cet encodage consiste simplement à remplacer un caractère interdit par : le caractère pourcentage suivi des deux caractères représentant le code hexadécimal US-ASCII du caractère à remplacer.
Exemple : le séparateur SEP (\r\n) deviendrait : %0D%0A
Pour décoder une chaîne URL-Encodée, il suffit de remplacer le triplet %?? par le caractère dont le code US-ASCII correspond.