Ce petit tutoriel va vous donner quelques notions sur ce qui se passe sous le capot: comment le navigateur et le serveur échangent des données.
Un peu de culture: le modèle OSI
Les communications réseaux fonctionnent en couches: c'est le modèle OSI (pour Open Systems Interconnection). Ce modèle décrit comment le réseau fonctionne, du plus concret au plus abstrait: chaque couche fournit une abstraction supplémentaire.
Niveau 1 : La couche physique
Il s'agit de la couche la plus basse: comment faire pour représenter des données à partir de signaux physiques ? Les protocoles de cette couche proposent des solutions pour interpréter des signaux électrique en bits (0/1, vrai/faux).
On trouve par exemple les protocoles physiques de communication filaires: DSL, USB, les protocoles pour les fibres optiques, le protocole des modem téléphoniques, et bien sûr la couche ethernet filaire standard avec les cordons RJ45. Mais on trouve aussi la couche physique de Bluetooth, les réseaux wifi 802.11, ...
Niveau 2 : La couche liaison
Cette couche part du principe qu'elle a accès à la notion de bits: elle va définir la notion de trame, c'est à dire la façon d'agencer les bits pour communiquer. Typiquement, cette couche va attribuer une adresse à chaque interface connectée, va définir comment les données sont encapsulée (les trames), et va définir la façon dont les trames circulent entre les interfaces.
C'est sur cette couche que l'on va trouver:
- la notion d'"ethernet" telle qu'on la connait pour internet. C'est à se niveau que l'adresse MAC des interfaces fait sens.
- mais aussi les "anneau à jetons" (token ring): une trame appelée jeton circule dans une seule direction autour d'un anneau. L'avantage est l'absence de collision.
- ou encore ARINC 429: une norme dans l'avionique.
Niveau 3 : La couche réseau
C'est la dernière couche des couches dites matérielles. Cette couche détermine le parcours des données et l'adressage logique.
Pour l'internet, c'est la couche dite IP: on s'abstrait de l'adresse MAC, et la notion de réseau devient une notion logique, indépendante de la couche physique.
Niveau 4 : La couche transport
Première couche dite "applicative", elle décrit les communications entre processus. Cette couche est la dernière à gèrer et corriger les erreurs : elle garantit une communication sans corruption et idéalement sans perte.
C'est la couche des protocoles UDP (User Datagram Protocol) et TCP (Transmission Control Protocol). TCP permet de garantir une connexion fiable entre deux processus qui peuvent ensuite échanger des données. C'est le protocole utilisé classiquement dans tous les protocoles de plus haut niveau des couches applicatives du dessus, en particulier... HTTP.
Niveau 5, 6 et 7: Les autres couches applicatives.
Ces trois couches, respectivement session, présentation et application, sont les couches spécialisées pour l'échange de données. Dans le contexte IP (donc de l'internet), la distinction n'est pas très nette: de façon générale, c'est à ce niveau que se passe les protocoles utilisés par les applications:
- DHCP
- HTTP pour le web
- IMAP et POP pour le mail
- FTP pour le transfer de fichier
- SSH pour la communication crypté
- VoIP pour la téléphonie sur internet
- ...
Le protocole HTTP
Le protocole HTTP (Hypertext Transfer Protocol) est un protocole de communication de type requête / réponse synchrone. Le protocole est textuel: les messages échangés utilisent des caractères encodés sur 8 bits. Une session HTTP consiste en une série d'émissions alternées entre un client et un serveur. Chaque émission consiste en un chapeau, un entête et un corps de message.
Les requêtes
La requête provient du client et s'adresse au serveur.
Le chapeau
Il contient la commande HTTP: ce que l'on demande au serveur. Typiquement:
- GET: demande de resource. En principe, cette requête est sans effet au niveau du serveur.
- POST: transmission de données, typiquement avec la création ou la modification de données au niveau du serveur (par exemple, mise à jour d'une base de donnée)
Il y a quelques autres commandes, mais pour les besoin de ce cours ces deux commandes suffisent.
Le GET et le POST prennent deux arguments:
- L'adresse de la resource (à partir de la racine du serveur)
- La version d'HTTP préférée
Par exemple:
va demander la resource index.html
qui se situe à la racine du site, et demander la version 1.1 du protocole.
L'entête
L'entête est une série de paires (nom d'attribut, valeur). Pour une requête typique, on trouve les attributs
Host
: le domaine du site internet concerné par la requêteReferer
: L'url du document d'où on vientUser-Agent
: chaine de caractère indiquant le nom du navigateur (ou de façon plus général du logiciel qui fait la requête).Cookie
: Les cookies éventuels que le site internet avait alloués
Le corps du message
Il est séparé de l'entête par une ligne vide.
Pour un GET, le corps du message est vide. Pour un POST, le corps du message contient le contenu des données que l'on envoie au serveur. Par exemple, le contenu d'un formulaire.
Les réponses
Une réponse provient du serveur, et correspond à une requête.
Le chapeau
Il consiste en un code de statut HTTP. Il est sous la forme Un sous-ensemble des codes et textes des réponses:
- 200 OK
- 301 MOVED PERMANENTLY
- 308 PERMANENT REDIRECT
- 400 BAD REQUEST
- 401 UNAUTHORIZED
- 403 FORBIDDEN
- 404 NOT FOUND
- 500 INTERNAL SERVER ERROR
L'entête
Comme pour les requêtes, l'entête contient des méta-données. Par exemple:
Date
: la date de créationServer
: le nom du programme qui fait tourner le serveurLast-Modified
: la date de dernière modificationContent-Type
: le type MIME (voir plus bas) et l'encodageContent-Length
: la taille du corps du messageSet-Cookie
: pour allouer des cookies
Le corps du message
contient les données demandées par la requête. L'encodage et le type des données sont donnés dans l'entête.
Exemple
Par exemple, la requête suivante sur le port 80 du serveur domain.com:
Donne comme réponse
Le standard MIME
Lorsqu'on reçoit une réponse HTTP, il n'y a à priori aucun moyen
de savoir quel est le type de donnée: est-ce du texte brut, du XML, un
fichier compressé, une vidéo, ... Et dans le cas d'un texte, quel est
l'encodage des caractères. On reçoit des octets en pagaille, et il
faut pouvoir en faire du sens. C'est le but du pragma Content-Type
dans l'entête de la réponse: dire comment interpréter le corps du
message.
Le standard MIME (pour Multipurpose Internet Mail Extension), à l'origine développé pour les mails (qui ont le même type de problème avec les fichiers attachés), est aussi utilisé pour HTTP.
Le format
De façon général, le type MIME et l'encodage du document est donné par L'encodage correspond à la façon d'associer des octets à des caractères... Et il y a beaucoup de façons de faire. Il faut donc le dire,
Quelques exemples de types MIME.
text
- text/plain : pour du texte brut
- text/html : pour de l'HTML
- text/xml : pour du XML
- text/javascript : pour... du javascript
- text/css
- ...
image
Correspond en général au format de l'image.
- image/png
- image/jpeg
- image/gif
- image/svg+xml
- ...
video et audio
Comme pour les images, correspond en général au format.
- video/mpeg
- video/mp4
- video/quicktime
- audio/x-wav
- audio/mp3
- ...
application
Ce type sert pour les fichiers multi-usages.
- application/pdf
- application/zip
- ...
Remarque
Les types MIME sont essentiellement une convention et un peu redondant. Par exemple, on trouve text/javascript
et application/javascript
. On trouve audio/wav
et audio/x-wav
. Il faut donc une bonne entente entre l'émetteur qui choisit un type MIME et le récepteur qui va le lire...
Il faut néanmoins noter que pour les types "standards", tous le monde est à peu près d'accord.