Veröffentlichung der Server-JavaScript-Plattform Node.js 17.0

Die Veröffentlichung von Node.js 17.0, einer Plattform zur Ausführung von Netzwerk-Anwendungen in JavaScript, hat stattgefunden. Node.js 17.0 gehört zur regulären Support-Phase, Updates hierfür werden bis Juni 2022 bereitgestellt. In den kommenden Tagen wird die Stabilisierung der Node.js 16-Zweig abgeschlossen, der den LTS-Status erhält und bis April 2024 unterstützt wird. Die Unterstützung der vorherigen LTS-Version Node.js 14.0 läuft bis April 2023, und die vorvorherige LTS-Version 12.0 bis April 2022.

Hauptverbesserungen:

  • Die V8-Engine wurde auf Version 9.5 aktualisiert.
  • Продолжена реализация вариантов базового API, основанных на использовании интерфейса асинхронных вычислений Promise. В дополнение к ранее предложенным API Timers Promises и Streams Promises в Node.js 17.0 представлен API Readline Promise для построчного чтения данных с использованием модуля readline. import * as readline from ‘node:readline/promises’; import { stdin as input, stdout as output } from ‘process’; const rl = readline.createInterface({ input, output }); const answer = await rl.question(‘What do you think of Node.js?’); console.log(‘Thank you for your valuable feedback: ${answer}’); rl.close();
  • Die im Lieferumfang enthaltene OpenSSL-Bibliothek wurde auf Version 3.0 aktualisiert (eine Fork von quictls/openssl mit aktiver QUIC-Unterstützung).
  • Die Version von Node.js wird nun in Stack-Traces ausgegeben, die im Falle von fatale Fehlern angezeigt werden, die zur Beendigung der Anwendung führen.

Darüber hinaus kann erwähnt werden, dass in den aktuellen Node.js-Zweigen zwei Sicherheitsanfälligkeiten (CVE-2021-22959, CVE-2021-22960) behoben wurden, die Angriffe der Klasse "HTTP Request Smuggling" (HRS) ermöglichen. Dabei können speziell gestaltete Client-Anfragen in die Inhalte anderer Benutzeranfragen, die im selben Thread zwischen Frontend und Backend verarbeitet werden, eingreifen (zum Beispiel könnte bösartiger JavaScript-Code in die Sitzung eines anderen Benutzers eingeschleust werden). Einzelheiten werden später veröffentlicht, bislang ist nur bekannt, dass die Probleme durch die fehlerhafte Handhabung von Leerzeichen zwischen dem Namen des HTTP-Headers und dem Doppelpunkt sowie durch unterschiedliche Handhabung von Wagenrücklauf- und Zeilenumbruchzeichen im Parameterblock, der beim chunked Transmission des Anfragekörpers verwendet wird, verursacht werden.

Wir erinnern daran, dass die Plattform Node.js sowohl zur serverseitigen Unterstützung von Web-Anwendungen als auch zur Erstellung von normalen Client- und Server-Netzwerkprogrammen verwendet werden kann. Um die Funktionalität von Node.js-Anwendungen zu erweitern, steht eine große Sammlung von Modulen zur Verfügung, in der man Module mit Implementierungen finden kann. Server und HTTP-, SMTP-, XMPP-, DNS-, FTP-, IMAP-, POP3-Clients, Module zur Integration mit verschiedenen Web-Frameworks, WebSocket- und Ajax-Handler, Datenbank-Connectoren (MySQL, PostgreSQL, SQLite, MongoDB), Template-Engines, CSS-Engines, Implementierungen von Krypto-Algorithmen und Autorisierungssystemen (OAuth), XML-Parser.

Um eine große Anzahl paralleler Anfragen zu verarbeiten, nutzt Node.js ein asynchrones Codeausführungsmodell, das auf der Verarbeitung von Ereignissen im nicht-blockierenden Modus und der Definition von Callback-Handlern basiert. Unterstützt werden Methoden wie epoll, kqueue, /dev/poll und select für das Multiplexen von Verbindungen. Für das Multiplexen von Verbindungen wird die Bibliothek libuv verwendet, die eine Erweiterung von libev in Unix-Systemen und von IOCP in Windows ist. Zur Erstellung eines Thread-Pools wird die Bibliothek libeio verwendet, für die Durchführung von DNS-Anfragen im nicht-blockierenden Modus ist c-ares integriert. Alle systemeigenen Aufrufe, die eine Blockierung verursachen, werden innerhalb des Thread-Pools ausgeführt und über eine unbenannte Pipe das Ergebnis ihrer Arbeit zurückgegeben, ebenso wie Signal-Handler. Die Ausführung von JavaScript-Code erfolgt durch den Einsatz der von Google entwickelten V8-Engine (zuzüglich Microsoft entwickelt eine Variante von Node.js mit der Chakra-Core-Engine).

Im Grunde ähnelt Node.js den Frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted und der Ereignisimplementation in Tcl, jedoch ist die Ereignisschleife (event loop) in Node.js für den Entwickler verborgen und erinnert an die Ereignisverarbeitung in einer Webanwendung, die im Browser läuft. Beim Erstellen von Anwendungen für Node.js muss man die Besonderheiten der ereignisgesteuerten Programmierung berücksichtigen, zum Beispiel anstelle von „var result = db.query(„select..“);“ mit der Erwartung, dass die Ausführung abgeschlossen ist und die Ergebnisse anschließend verarbeitet werden, wird in Node.js das Prinzip der asynchronen Ausführung verwendet, d.h. der Code wird zu „db.query(„select..“, function (result) { Verarbeitung des Ergebnisses });“ umgewandelt, wobei die Kontrolle sofort an den nachfolgenden Code übergeben wird und das Ergebnis der Abfrage bei Erhalt der Daten verarbeitet wird.

Quelle: opennet.ru

60GB SSD 8Gb DDR4