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'étudieront 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 2 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ées 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, certaines en-têtes sont plutôt caractéristiques des requêtes, tandis que d'autres sont plutôt utilisées 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ées, à 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 (Carriage Return, CR) |
0x0D (13) | \r |
Il fait partie du séparateur SEP. Son utilisation à l'intérieur de la Ligne d'Introduction et des en-têtes est donc interdite. |
nouvelle ligne (New Line ou Line Feed, LF) |
0x0A (10) | \n |
Il fait partie du séparateur SEP. Son utilisation à l'intérieur de la Ligne d'Introduction et des en-têtes est donc interdite. |
point d'interogation | 0x3F (63) | ? |
Il est utilisé à certains endroits de la Ligne d'Introduction. Son utilisation à l'intérieur de celle-ci est donc réglementée. |
égal | 0x3D (31) | = |
Il est utilisé à certains endroits de la Ligne d'Introduction. Son utilisation à l'intérieur de celle-ci est donc réglementée. |
esperluette (et commercial) |
0x26 (38) | & |
Il est utilisé à certains endroits de la Ligne d'Introduction. Son utilisation à l'intérieur de celle-ci est donc réglementée. |
dièse | 0x23 (35) | # |
Il est utilisé à certains endroits de la Ligne d'Introduction. Son utilisation à l'intérieur de celle-ci est donc réglementée. |
pourcentage | 0x25 (37) | % |
Il est utilisé dans le cadre de l'URL-Encoding. Son utilisation à l'intérieur de celui-ci est donc réglementée. |
deux points | 0x3A (58) | : |
Il sont utilisés dans les en-têtes. Son utilisation à l'intérieur de celles-ci est donc réglementée. |
espace (Space, SP) |
0x20 (32) | ' ' ou " " |
Il est utilisé dans la Ligne d'Introduction et les en-têtes. Son utilisation à l'intérieur de celles-ci est donc réglementée. |
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.