Version JavaScript Node.js 17.0 côté serveur

Node.js 17.0, une plate-forme permettant d'exécuter des applications réseau en JavaScript, a été publiée. Node.js 17.0 est une branche de support régulière qui continuera à recevoir des mises à jour jusqu'en juin 2022. Dans les prochains jours, la stabilisation de la branche Node.js 16 sera achevée, qui recevra le statut LTS et sera supportée jusqu'en avril 2024. La maintenance de la précédente branche LTS de Node.js 14.0 durera jusqu'en avril 2023, et l'année avant la dernière branche LTS 12.0 jusqu'en avril 2022.

Principales améliorations :

  • Le moteur V8 a été mis à jour vers la version 9.5.
  • La mise en œuvre de variantes de l'API de base basées sur l'utilisation de l'interface informatique asynchrone Promise s'est poursuivie. En plus des API Timers Promises et Streams Promises précédemment proposées, Node.js 17.0 introduit l'API Readline Promise pour lire les données ligne par ligne à l'aide du module readline. importer * en tant que readline depuis 'node:readline/promises' ; import { stdin en entrée, stdout en sortie } depuis 'processus' ; const rl = readline.createInterface({ entrée, sortie }); const réponse = wait rl.question('Que pensez-vous de Node.js ?'); console.log('Merci pour vos précieux commentaires : ${answer}'); rl.close();
  • La bibliothèque OpenSSL fournie a été mise à jour vers la version 3.0 (un fork quictls/openssl avec la prise en charge du protocole QUIC activée est utilisé).
  • Activation de l'affichage de la version Node.js dans les traces de pile qui sont générées en cas d'erreurs fatales entraînant la fermeture de l'application.

Par ailleurs, on peut citer la suppression de deux vulnérabilités dans les branches actuelles de Node.js (CVE-2021-22959, CVE-2021-22960), qui permettent de réaliser des attaques de type « HTTP Request Smuggling » (HRS), qui nous permettent de nous insérer dans le contenu des requêtes d'autres utilisateurs traitées dans le même thread entre le frontend et le backend (par exemple, du code JavaScript malveillant peut être inséré dans la session d'un autre utilisateur). Les détails seront révélés plus tard, mais pour l'instant nous savons seulement que les problèmes sont causés par une gestion incorrecte des espaces entre le nom de l'en-tête HTTP et les deux points, ainsi que par une gestion différente des caractères de retour chariot et de saut de ligne dans le bloc de paramètres utilisé lors de la transmission. le corps de la requête en plusieurs parties en mode « fragmenté » "

Rappelons que la plateforme Node.js peut être utilisée à la fois pour le support côté serveur d'applications Web et pour la création de programmes réseau client et serveur ordinaires. Pour étendre les fonctionnalités des applications pour Node.js, une large collection de modules a été préparée, dans laquelle vous pouvez trouver des modules avec l'implémentation de serveurs et clients HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, des modules d'intégration avec divers frameworks web, gestionnaires WebSocket et Ajax, connecteurs aux SGBD (MySQL, PostgreSQL, SQLite, MongoDB), moteurs de templates, moteurs CSS, implémentations d'algorithmes cryptographiques et de systèmes d'autorisation (OAuth), analyseurs XML.

Pour assurer le traitement d'un grand nombre de requêtes parallèles, Node.js utilise un modèle d'exécution de code asynchrone basé sur la gestion d'événements non bloquants et la définition de gestionnaires de rappel. Les méthodes prises en charge pour les connexions multiplexées sont epoll, kqueue, /dev/poll et select. Pour le multiplexage des connexions, la bibliothèque libuv est utilisée, qui est un module complémentaire pour libev sur les systèmes Unix et IOCP sur Windows. La bibliothèque libeio est utilisée pour créer un pool de threads, et c-ares est intégré pour effectuer des requêtes DNS en mode non bloquant. Tous les appels système qui provoquent un blocage sont exécutés à l'intérieur du pool de threads, puis, comme les gestionnaires de signaux, transfèrent le résultat de leur travail via un canal sans nom (pipe). L'exécution du code JavaScript est assurée grâce à l'utilisation du moteur V8 développé par Google (par ailleurs, Microsoft développe une version de Node.js avec le moteur Chakra-Core).

À la base, Node.js est similaire aux frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted et à l'implémentation d'événements Tcl, mais la boucle d'événements dans Node.js est masquée pour le développeur et ressemble à la gestion des événements dans une application Web en cours d'exécution. dans le navigateur. Lors de l'écriture d'applications pour node.js, vous devez tenir compte des spécificités de la programmation événementielle, par exemple, au lieu de faire "var result = db.query("select..");" avec attente de l'achèvement des travaux et traitement ultérieur des résultats, Node.js utilise le principe de l'exécution asynchrone, c'est-à-dire le code est transformé en "db.query("select..", function (result) {result processing});", dans lequel le contrôle passera instantanément à un autre code, et le résultat de la requête sera traité au fur et à mesure que les données arrivent.

Source: opennet.ru

Ajouter un commentaire