La domination du HTTP
Niveau :
Résumé : HTTP
HTTP règne en maître dans le monde des protocoles. C'est le plus utilisé et il n'est pas près de lâcher sa place. Je vais vous rappeler pourquoi.
Les protocoles
Dans le monde des protocoles il y a plusieurs couches.
Partons de la couche 3 : IP. Ce protocole est internet à lui tout seul. Personne ne parviendra à le détrôner si ce n'est lui-même (IPv6). Les autres protocoles de niveaux 3 viables visent des niches ou du à-peine-réseau (bluetooth ou usb collent aussi au modèle osi).
Sur la couche 4 on trouve TCP et UDP, qui ont très peu de concurrents. Il en existe, mais ils sont rares car difficiles à développer (il faut toucher au noyau sous linux si on veut faire propre et efficace).
Sur la couche 5 on trouve des milliers de protocoles, ils sont faciles à développer (en espace utilisateur) et donc courants. Et pourtant, on constate que sur internet un très petit nombre d'entre eux sont utilisés en masse : DNS, SMTP, HTTP. Les autres POP, IMAP, FTP, SSH ... sont utilisés mais commencent à se faire anecdotiques. Pourquoi ?
HTTP
HTTP est de loin de plus utilisé parce que de plus en plus de services se basent directement sur HTTP plutôt que d'inventer leur protocole. Et ils ont de très bonnes raisons pour ça :
- ne pas réinventer la roue, des bibliothèques et des serveurs existent déjà
- HTTP est autorisé à traverser quasiment tous les firewalls
- il traverse le NAT
- il est capable de supporter la déconnexion (il fonctionne en mode non connecté)
- le SSL est déjà implémenté
- l'authentification est déjà implémentée
- il est possible de développer rapidement une preuve de concept avec apache et un langage de script
- il utilise une API très simple : question -> réponse
Du coup on le retrouve dans :
- les sites web (ouf)
- le transfert de fichier
- les systèmes de fichiers (webdav)
- les appels de fonction à distance (XMLRPC)
- la gestion de calendrier (caldav)
- l'interconnexion de services (SOAP)
- les applications distantes (ajax)
- la communication instantanée (Jabber)
- et j'en oublie ...
Mais pourquoi une telle domination sur tous les autres protocoles ? Ce n'est pas seulement grâce à l'omniprésence des navigateurs. Tout d'abord HTTP propose déjà un certain nombre de services (voir plus haut) qui ne sont plus à redévelopper. Mais surtout, regardons ses concurrents :
- SMTP
- DNS
- RPC
- SNMP
- Et c'est tout !
Oui c'est tout, en effet, ce sont à peu près les seuls protocoles qui ont été prévus pour être extensibles et disposer d'une couche supérieure. Ils fonctionnent tous sur le système question réponse et laissent le soin à la couche du dessus d'interpréter le sens des questions et des réponses :
- DNS : basé sur UDP, non fiable, limité en taille -> éliminé
- SNMP : idem, même s'il existe une version TCP -> éliminé
- RPC : format binaire difficile à mettre en place -> éliminé
- SMTP : il est difficile de récupérer autre chose que des codes d'erreur en SMTP puisqu'il est fait pour l'envoi -> éliminé
Si on veut développer une nouvelle application qui communique par le réseau, on a le choix entre inventer un nouveau protocole ou simplement créer une sémantique de question / réponse au dessus de HTTP et profiter de tous ses avantages. Les rares cas où ce n'est pas possible :
- besoin de données en temps réel (et encore le débit augmentant, HTTP peut faire RTSP du pauvre)
- besoin de la notion d'évènement du serveur vers le client (et encore, certaines bidouilles HTTP laissant la connexion ouverte permettent ce comportement)
- besoin de multicast ou de fonctionnalités encore exotiques aujourd'hui
Conclusion
Le HTTP c'est LE protocole, celui qui remplace le TCP d'hier.
Le TCP n'est plus ce qu'il était, c'est à dire la couche sur laquelle on se base pour développer un nouveau protocole.
Vous pouvez être sûr qu'il y a encore des milliers de protocoles à inventer, mais vous pouvez aussi être sur que la plupart d'entre eux se baseront sur HTTP. D'ailleurs celui-ci étant extensible, il est probable qu'il évolue un jour pour être un peu plus générique et apporter des réponses aux problèmes qui se posent dans certains cas comme les évènements.
On ne devrait plus parler de TCP/IP mais de HTTP/TCP/IP. Finalement, on se rapproche du modèle OSI.