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

Die Version 17.0 von Node.js wurde veröffentlicht, einer Plattform zur Ausführung von Netzwerk-Anwendungen in JavaScript. Node.js 17.0 gehört zu der Reihe mit regulärer Unterstützung, deren Updates bis Juni 2022 bereitgestellt werden. In den kommenden Tagen wird die Stabilisierung von Node.js 16 abgeschlossen, das den LTS-Status erreichen wird und bis April 2024 unterstützt wird. Der Support für die vorherige LTS-Version Node.js 14.0 wird bis April 2023 fortgesetzt, und die vorletzte LTS-Version 12.0 bis April 2022.

Wesentliche Verbesserungen:

  • 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 mitgelieferte OpenSSL-Bibliothek wurde auf Version 3.0 aktualisiert (basierend auf dem Fork quictls/openssl mit aktivierter QUIC-Protokollunterstützung).
  • Die Version von Node.js wird in den Stack-Traces angezeigt, die im Falle von schwerwiegenden Fehlern, die zum Absturz der Anwendung führen, ausgegeben werden.

Zusätzlich kann erwähnt werden, dass in den aktuellen Versionen von Node.js zwei Schwachstellen (CVE-2021-22959, CVE-2021-22960) behoben wurden, die Angriffe der Kategorie "HTTP Request Smuggling" (HRS) ermöglichen. Diese Angriffe erlauben es, durch das Senden speziell gestalteter clientseitiger Anfragen in die Inhalte anderer Nutzeranfragen einzudringen, die im gleichen Thread zwischen dem Frontend und Backend verarbeitet werden. Beispielsweise könnte dies dazu führen, dass schädlicher JavaScript-Code in die Sitzung eines anderen Nutzers eingefügt wird. Weitere Details werden später veröffentlicht; bisher ist nur bekannt, dass die Probleme durch die fehlerhafte Verarbeitung von Leerzeichen zwischen dem HTTP-Header-Namen und dem Doppelpunkt sowie durch die unterschiedliche Handhabung von Wagenrücklauf- und Zeilenumbruchzeichen im Parameterblock, der während der Übertragung des Anfragekörpers im "chunked"-Modus verwendet wird, verursacht werden.

Erinnern wir uns daran, dass die Plattform Node.js sowohl für die serverseitige Unterstützung von Webanwendungen als auch für die Erstellung herkömmlicher client- und serverseitiger Netzwerkprogramme verwendet werden kann. Um die Funktionalität von Node.js-Anwendungen zu erweitern, wurde eine umfangreiche Sammlung von Modulen vorbereitet, in der Module mit Implementierungen zu finden sind. 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 Kryptografie-Algorithmen und Authentifizierungssystemen (OAuth), XML-Parser.

Um eine große Anzahl paralleler Anfragen zu verarbeiten, verwendet Node.js ein asynchrones Codeausführungsmodell, das auf der Verarbeitung von Ereignissen im Nicht-Blockierungsmodus und der Definition von Callback-Handlern basiert. Zu den Methoden der Verbindungsmultiplexierung gehören Techniken wie epoll, kqueue, /dev/poll und select. Für die Verbindungs multiplexierung verwendet Node.js die Bibliothek libuv, die eine Erweiterung von libev in Unix-Systemen und von IOCP in Windows darstellt. Zum Erstellen eines Thread-Pools wird die Bibliothek libeio verwendet, und für die nicht-blockierenden DNS-Abfragen ist c-ares integriert. Alle systemaufrufenden Blockierungen werden innerhalb des Thread-Pools ausgeführt und über ein anonymes Pipe zurückgegeben, ähnlich wie Signal-Handler, die die Ergebnisse ihrer Arbeit übermitteln. Die Ausführung von JavaScript-Code erfolgt durch die Nutzung der von Google entwickelten V8-Engine (zusätzlich entwickelt Microsoft eine Version von Node.js mit der Chakra-Core-Engine).

Node.js ähnelt in seiner Funktionalität den Frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted und der Ereignisimplementierung in Tcl. Der Event-Loop in Node.js ist jedoch für den Entwickler nicht sichtbar und erinnert an die Ereignisverarbeitung in einer Webanwendung, die im Browser läuft. Bei der Entwicklung von Anwendungen für Node.js muss man die Besonderheiten der ereignisgesteuerten Programmierung berücksichtigen. Anstatt den Code wie «var result = db.query(«select..»);» zu schreiben und auf das Ende der Bearbeitung zu warten, verwendet Node.js das Prinzip der asynchronen Ausführung. Dies bedeutet, dass der Code in «db.query(«select..», function (result) { Ergebnisverarbeitung });» umgewandelt wird. Dabei wird die Kontrolle sofort an den nachfolgenden Code übergeben, während das Ergebnis des Abfrage mit dem Eintreffen der Daten verarbeitet wird.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster