Serverseitige JavaScript-Version Node.js 17.0

Die Veröffentlichung von Node.js 17.0, einer Plattform zum Ausführen von Netzwerkanwendungen in JavaScript, ist erfolgt. Node.js 17.0 ist ein regulärer Supportzweig mit Updates bis Juni 2022. In den kommenden Tagen wird die Stabilisierung des Node.js 16-Zweigs abgeschlossen, der den LTS-Status erhält und bis April 2024 unterstützt wird. Die Wartung des vorherigen Node.js 14.0 LTS-Zweigs wird bis April 2023 und des vorherigen 12.0 LTS-Zweigs bis April 2022 dauern.

Wichtigste Verbesserungen:

  • Der V8-Motor wurde auf Version 9.5 aktualisiert.
  • Die Implementierung von Varianten der Basis-API basierend auf der Verwendung der asynchronen Computing-Schnittstelle Promise wurde fortgesetzt. Zusätzlich zu den zuvor vorgeschlagenen Timers Promises- und Streams Promises-APIs führt Node.js 17.0 die Readline Promise API zum zeilenweisen Lesen von Daten mithilfe des Readline-Moduls ein. * als Readline aus „node:readline/promises“ importieren; import { stdin als Eingabe, stdout als Ausgabe } from 'process'; const rl = readline.createInterface({ Eingabe, Ausgabe }); const answer = waiting rl.question('Was halten Sie von Node.js?'); console.log('Vielen Dank für Ihr wertvolles Feedback: ${answer}'); rl.close();
  • Die mitgelieferte OpenSSL-Bibliothek wurde auf Version 3.0 aktualisiert (unter Verwendung des quictls/openssl-Forks mit aktivierter QUIC-Protokollunterstützung).
  • Stellen Sie sicher, dass die Node.js-Version in Stacktraces für schwerwiegende Fehler angezeigt wird, die zum Beenden der Anwendung führen.

Darüber hinaus können wir die Beseitigung von zwei Schwachstellen in den aktuellen Zweigen von Node.js (CVE-2021-22959, CVE-2021-22960) erwähnen, die die Durchführung von Angriffen der Klasse HTTP Request Smuggling (HRS) ermöglichen Ermöglichen Sie durch das Senden speziell entwickelter Client-Anfragen, sich in den Inhalt von Anfragen anderer Benutzer einzumischen, die im selben Thread zwischen Front-End und Backend verarbeitet werden (Sie können beispielsweise die Ersetzung von bösartigem JavaScript-Code in der Sitzung eines anderen Benutzers erreichen). Details werden später bekannt gegeben, aber derzeit ist nur bekannt, dass die Probleme durch eine falsche Behandlung von Leerzeichen zwischen dem HTTP-Header-Namen und dem Doppelpunkt sowie durch eine unterschiedliche Behandlung von Wagenrücklauf- und Zeilenvorschubzeichen im beim Übergeben verwendeten Parameterblock verursacht werden den Anfragetext in Blöcken im „Chunked“-Modus.

Denken Sie daran, dass die Node.js-Plattform sowohl für die Serverwartung von Webanwendungen als auch für die Erstellung gewöhnlicher Client- und Server-Netzwerkprogramme verwendet werden kann. Um die Funktionalität von Anwendungen für Node.js zu erweitern, wurde eine große Modulsammlung vorbereitet, in der Sie Module mit der Implementierung von HTTP-, SMTP-, XMPP-, DNS-, FTP-, IMAP-, POP3-Servern und -Clients sowie Module zur Integration finden mit verschiedenen Web-Frameworks, WebSocket- und Ajax-Handlern, DBMS-Konnektoren (MySQL, PostgreSQL, SQLite, MongoDB), Templating-Engines, CSS-Engines, Implementierungen von Kryptoalgorithmen und Autorisierungssystemen (OAuth), XML-Parsern.

Um die Verarbeitung einer großen Anzahl paralleler Anfragen sicherzustellen, verwendet Node.js ein asynchrones Codeausführungsmodell, das auf nicht blockierender Ereignisbehandlung und der Definition von Callback-Handlern basiert. Unterstützte Methoden zum Multiplexen von Verbindungen sind epoll, kqueue, /dev/poll und select. Für das Verbindungsmultiplexing wird die libuv-Bibliothek verwendet, die ein Add-on für libev auf Unix-Systemen und IOCP auf Windows ist. Die libeio-Bibliothek wird zum Erstellen eines Thread-Pools verwendet und c-ares ist integriert, um DNS-Abfragen im nicht blockierenden Modus durchzuführen. Alle Systemaufrufe, die eine Blockierung verursachen, werden innerhalb des Thread-Pools ausgeführt und übertragen dann wie Signalhandler das Ergebnis ihrer Arbeit über eine unbenannte Pipe (Pipe) zurück. Die Ausführung von JavaScript-Code erfolgt durch die Verwendung der von Google entwickelten V8-Engine (zusätzlich entwickelt Microsoft eine Version von Node.js mit der Chakra-Core-Engine).

Im Kern ähnelt Node.js den Perl AnyEvent-, Ruby Event Machine-, Python Twisted-Frameworks und der Tcl-Ereignisimplementierung, aber die Ereignisschleife in Node.js bleibt dem Entwickler verborgen und ähnelt der Ereignisbehandlung in einer laufenden Webanwendung im Browser. Beim Schreiben von Anwendungen für node.js müssen Sie beispielsweise die Besonderheiten der ereignisgesteuerten Programmierung berücksichtigen, anstatt „var result = db.query(“select..“);“ auszuführen. Beim Warten auf den Abschluss der Arbeit und der anschließenden Verarbeitung der Ergebnisse verwendet Node.js das Prinzip der asynchronen Ausführung, d. h. Der Code wird in „db.query(“select..“, function (result) {result processing});“ umgewandelt, wobei die Kontrolle sofort an weiteren Code übergeben wird und das Abfrageergebnis verarbeitet wird, sobald Daten eintreffen.

Source: opennet.ru

Kommentar hinzufügen