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, BenoĂźt Sibaud, theojouedubanjo, ted, Ysabeau đŸ§¶, Jona, olivierweb, palm123, claudex et Pierre Tramal Date: 2020ćčŽ05月01æ—„T14:02:40+02:00 License: CC By-SA Tags: web, navigateur_web, socket, websocket, nginx, apache et apache2 Score: 112 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 `>` Ă  intervalle rĂ©gulier, avec une adresse source spĂ©cifique. Cette adresse renvoie un code JavaScript qui appelle une fonction avec un nom prĂ©dĂ©terminĂ© et des donnĂ©es en paramĂštre de cette fonction. C’est la mĂ©thode JSONP. Avouez que ce n’est pas fou : on fait plein de requĂȘtes inutiles, et paie la fluiditĂ© de ton jeu en ligne. Certaines personnes, insatisfaites par la mĂ©thode prĂ©cĂ©dente, se sont alors mises Ă  dĂ©tourner l’élĂ©ment `