Avance rapide jusqu'en décembre 2017, Les websockets sont pris en charge par (pratiquement) tous les navigateurs. et leur utilisation est très courante.
Toutefois, cela ne signifie pas que les Websockets ont réussi à remplacer AJAX, du moins pas complètement, d'autant plus que l'adaptation à HTTP/2 est en plein essor.
La réponse courte est qu'AJAX est toujours excellent pour la plupart des applications REST, même en utilisant les Websockets. Mais tout est dans les détails, alors... :
AJAX pour les sondages ?
L'utilisation d'AJAX pour les sondages (ou les longs sondages) est en train de disparaître. (et il devrait l'être), mais il reste encore utilisé pour deux bonnes raisons (principalement pour les petites applications web) :
-
Pour de nombreux développeurs, AJAX est plus facile à coder, surtout lorsqu'il s'agit de coder et de concevoir le backend.
-
Avec HTTP/2, le coût le plus élevé lié à AJAX (l'établissement d'une nouvelle connexion) a été éliminé, ce qui permet aux appels AJAX d'être assez performants, notamment pour l'affichage et le téléchargement de données.
Cependant, La poussée par websocket est de loin supérieure à AJAX (pas besoin de se réauthentifier ou de renvoyer les en-têtes, pas besoin d'aller-retour "sans données", etc'). Ce site a été discuté à plusieurs reprises.
AJAX pour REST ?
Les appels d'API REST constituent une meilleure utilisation d'AJAX. Cette utilisation simplifie la base de code et empêche la connexion Websocket de se bloquer (notamment pour les téléchargements de données de taille moyenne).
Il existe un certain nombre de des raisons convaincantes de préférer AJAX aux appels d'API REST et les téléchargements de données :
-
L'API AJAX a été pratiquement conçue pour les appels d'API REST et elle est parfaitement adaptée.
-
Les appels REST et les téléchargements utilisant AJAX sont nettement plus faciles à coder, tant sur le client que sur le backend.
-
Lorsque la charge utile des données augmente, les connexions Websocket peuvent se bloquer, à moins que la logique de fragmentation et de multiplexage des messages ne soit codée.
Si un téléchargement est effectué dans une seule Websocket send
il pourrait bloquer un flux Websocket jusqu'à ce que le téléchargement soit terminé. Cela réduit les performances, notamment sur les clients les plus lents.
Une conception courante utilise de petits messages bidi transférés sur des Websockets, tandis que REST et les téléchargements de données (client à serveur) tirent parti de la facilité d'utilisation d'AJAX pour éviter le blocage du Websocket.
Cependant, sur des projets plus importants, la flexibilité offerte par les Websockets et l'équilibre entre la complexité du code et la gestion des ressources feront pencher la balance en faveur des Websockets.
Par exemple, les téléchargements basés sur Websocket pourraient offrir la possibilité de reprendre des téléchargements volumineux après qu'une connexion a été interrompue et rétablie (vous vous souvenez de ce film de 5 Go que vous vouliez télécharger ?)
En codant la logique de fragmentation du téléchargement, il est facile de reprendre un téléchargement interrompu (la partie la plus difficile était de coder la chose).
Qu'en est-il de la poussée HTTP/2 ?
Je devrais probablement ajouter que la fonction "push" de HTTP/2 ne remplace pas (et ne peut probablement pas remplacer) les Websockets.
Cela a été discuté ici mais il suffit de mentionner qu'une seule connexion HTTP/2 sert l'ensemble du navigateur (tous les onglets/fenêtres). Les données poussées par HTTP/2 ne savent donc pas à quel onglet/fenêtre elles appartiennent, ce qui élimine sa capacité à remplacer la capacité de Websocket à pousser des données directement vers un onglet/fenêtre spécifique du navigateur.
Si les Websockets sont parfaits pour les petites communications de données bidirectionnelles, AJAX présente encore un certain nombre d'avantages, surtout lorsqu'il s'agit de charges utiles plus importantes (téléchargements, etc.).
Et la sécurité ?
Eh bien, en général, plus la confiance et le contrôle sont offerts à un programmeur, plus l'outil est puissant... et plus les problèmes de sécurité se multiplient.
Par nature, AJAX aurait le dessus, puisque la sécurité est intégrée au code du navigateur (ce qui est parfois discutable, mais c'est toujours le cas).
D'autre part, les appels AJAX sont plus sensibles aux attaques de type "man in the middle", tandis que les problèmes de sécurité des Websockets sont généralement des bogues dans le code de l'application qui ont introduit une faille de sécurité (c'est généralement dans la logique d'authentification dorsale que vous les trouverez).
Personnellement, je ne trouve pas qu'il y ait une si grande différence, je pense même que les Websockets sont légèrement mieux lotis, surtout quand on sait ce que l'on fait.
Mon humble avis
À mon avis, j'utiliserais les Websockets pour tout sauf les appels d'API REST. Je fragmenterais les téléchargements de données volumineuses et les enverrais par Websockets lorsque c'est possible.
Les sondages, à mon avis, devraient être interdits, le coût en trafic réseau est horrible et le push Websocket est assez facile à gérer, même pour les nouveaux développeurs.
2 votes
Voici une liste de moteurs qui supportent les sockets web. fr.wikipedia.org/wiki/
0 votes
Quelques chiffres : blog.arungupta.me/rest-vs-websocket-comparison-benchmarks
0 votes
Il peut être intéressant de noter que vous avez besoin d'un autre port (différent) pour connecter des sockets web en plus d'un serveur web déjà en fonctionnement. En fonction de votre situation, cela peut ou non être un problème.