URL: https://linuxfr.org/news/communiquer-avec-le-serveur-depuis-un-navigateur-web-xhr-sse-et-websockets Title: Communiquer avec le serveur depuis un navigateur Web : XHR, SSE et WebSockets Authors: raphj volts, theojouedubanjo, ted, jona, olivierweb, Ysabeau, palm123, Pierre Tramal et Xavier Claude Date: 2020-05-01T14:02:40+02:00 License: CC By-SA Tags: web, navigateur_web, navigateur, socket, websocket, nginx et nginxwebserver Score: 4 Dans cette dépêche, nous allons faire un tour d’horizon de différentes manières de communiquer avec un serveur depuis une application Web, avec un petit peu d’histoire, avant de rentrer plus profondément dans le fonctionnement des WebSockets, que nous allons démystifier. Nous digresserons ensuite à propos de la gestion (problématique) des requêtes longues et de HTTP 2 avec Apache, et nous discuterons d’une manière de limiter la casse. La dépêche contient quelques morceaux raisonnables mais l’absurdité est latente. Supposons que nous ayons une application Web qui a besoin de recevoir des évènements du serveur pour voir si quelque chose s’est passé. À tout hasard, un jeu de société en ligne. Ce jeu a besoin d’envoyer les coups des joueurs et joueuses, et de recevoir les coups des autres. Le serveur ne peut pas contacter le navigateur. Celui-ci est peut-être derrière un pare-feu, et de toute façon il n’y a pas de méthode pour cela. Le modèle du web, c’est une requête HTTP de la part du navigateur, et le serveur sert cette requête. Et puis, à la base, une requête = un chargement de page. Mais des techniques sont apparues pour abuser de ce modèle, puis les standards se sont mis à intégrer des méthodes pour mener ces abus en toute sérénité. ---- [Naissance d'XMLHttpRequest, racontée par son créateur Alex Hopmann](https://web.archive.org/web/20070323120943/http://www.alexhopmann.com/xmlhttp.htm) [Writing WebSocket servers (MDN)](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers) [Implementing a WebSocket server with Node.js](https://medium.com/hackernoon/implementing-a-websocket-server-with-node-js-d9b78ec5ffa8) [Websockets (Wikipedia)](https://en.wikipedia.org/wiki/WebSocket) [L'objet EventSource (MDN)](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) [Apache mod_http2](https://httpd.apache.org/docs/2.4/mod/mod_http2.html) [La bibliothèque broadcast-channel](https://github.com/pubkey/broadcast-channel) [L'objet BroadcastChannel (MDN)](https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel) [Comet (Wikipedia)](https://en.wikipedia.org/wiki/Comet_(programming)) [Qt for Beginners](https://wiki.qt.io/Qt_for_Beginners) ---- # AJAX avec XMLHttpRequest ## Préambule Au commencement, les utilisateurs saisissaient des adresses, cliquaient sur des liens ou validaient des formulaires, cela engendrait des requêtes HTTP, un (re)chargement de la page et tout le monde était content, les choses étaient claires et simples. Les pages étaient essentiellement statiques. Puis des gens ont ressenti le besoin de rendre les pages un peu plus dynamiques. Chacun son truc ! Peut-être que ces personnes aimaient les journaux qui bougent dans Harry Potter et se sont pris pour des sorciers. Du coup, JavaScript est apparu. Mais comme animer des formes, changer des couleurs et faire clignoter des trucs c’est rigolo mais ça va bien deux secondes, il leur a fallu plus et ils se sont mis à développer diverses bidouilles pour communiquer avec le serveur. Tout d’abord, simple, vous créiez une balise script ou une image vers une adresse spécifique contenant des données à envoyer au serveur et c’est réglé : le navigateur va faire une requête. Pour recevoir les évènements du serveur, vous pouviez créer des balises `