Server-side JavaScript Node.js 17.0 release

Node.js 17.0, een platform voor het uitvoeren van netwerkapplicaties in JavaScript, werd uitgebracht. Node.js 17.0 is een reguliere ondersteuningstak die tot juni 2022 updates zal blijven ontvangen. De komende dagen wordt de stabilisatie van de Node.js 16-branch voltooid, die de LTS-status krijgt en wordt ondersteund tot april 2024. Het onderhoud van de vorige LTS-tak van Node.js 14.0 duurt tot april 2023, en het jaar daarvoor de laatste LTS-tak 12.0 tot april 2022.

Belangrijkste verbeteringen:

  • De V8-motor is bijgewerkt naar versie 9.5.
  • De implementatie van varianten van de basis-API op basis van het gebruik van de Promise asynchrone computerinterface is voortgezet. Naast de eerder aangeboden Timers Promises en Streams Promises API's introduceert Node.js 17.0 de Readline Promise API voor het regel voor regel lezen van data met behulp van de readline-module. import * als leesregel uit 'node:readline/promises'; import { stdin als invoer, stdout als uitvoer } uit 'proces'; const rl = readline.createInterface({invoer, uitvoer }); const antwoord = wacht op rl.question('Wat vind je van Node.js?'); console.log('Bedankt voor uw waardevolle feedback: ${antwoord}'); rl.sluiten();
  • De meegeleverde OpenSSL-bibliotheek is bijgewerkt naar versie 3.0 (er wordt een quictls/openssl-vork gebruikt met QUIC-protocolondersteuning ingeschakeld).
  • Ingeschakeld dat de Node.js-versie wordt weergegeven in stacktraces die worden uitgevoerd in geval van fatale fouten die ervoor zorgen dat de toepassing wordt beëindigd.

Daarnaast kunnen we melding maken van de eliminatie van twee kwetsbaarheden in de huidige takken van Node.js (CVE-2021-22959, CVE-2021-22960), die het mogelijk maken om “HTTP Request Smuggling” (HRS)-aanvallen uit te voeren, die stellen ons in staat om in te grijpen in de inhoud van verzoeken van andere gebruikers die in dezelfde thread tussen de frontend en de backend worden verwerkt (kwaadaardige JavaScript-code kan bijvoorbeeld in de sessie van een andere gebruiker worden ingevoegd). Details zullen later worden onthuld, maar voorlopig weten we alleen dat de problemen worden veroorzaakt door een onjuiste behandeling van spaties tussen de HTTP-headernaam en de dubbele punt, evenals door een verschillende behandeling van Carriage Return- en Line Feed-tekens in het parameterblok dat wordt gebruikt bij het verzenden de verzoektekst in delen in de “chunked”-modus "

Laten we niet vergeten dat het Node.js-platform zowel kan worden gebruikt voor serverondersteuning van webapplicaties als voor het maken van gewone client- en servernetwerkprogramma's. Om de functionaliteit van applicaties voor Node.js uit te breiden, is een grote verzameling modules voorbereid, waarin u modules kunt vinden met de implementatie van HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-servers en -clients, modules voor integratie met verschillende webframeworks, WebSocket- en Ajax-handlers, connectoren voor DBMS (MySQL, PostgreSQL, SQLite, MongoDB), template-engines, CSS-engines, implementaties van cryptografische algoritmen en autorisatiesystemen (OAuth), XML-parsers.

Om de verwerking van een groot aantal parallelle verzoeken te garanderen, gebruikt Node.js een asynchrone code-uitvoeringsmodel op basis van niet-blokkerende gebeurtenisafhandeling en de definitie van callback-handlers. Ondersteunde methoden voor multiplexverbindingen zijn epoll, kqueue, /dev/poll en select. Voor verbindingsmultiplexing wordt de libuv-bibliotheek gebruikt, een add-on voor libev op Unix-systemen en IOCP op Windows. De libeio-bibliotheek wordt gebruikt om een ​​threadpool te maken en c-ares is geïntegreerd om DNS-query's in niet-blokkerende modus uit te voeren. Alle systeemaanroepen die blokkering veroorzaken, worden uitgevoerd binnen de threadpool en dragen vervolgens, net als signaalbehandelaars, het resultaat van hun werk terug via een naamloze pijp (pijp). De uitvoering van JavaScript-code wordt verzorgd door het gebruik van de V8-engine die is ontwikkeld door Google (daarnaast ontwikkelt Microsoft een versie van Node.js met de Chakra-Core-engine).

In de kern is Node.js vergelijkbaar met de Perl AnyEvent, Ruby Event Machine, Python Twisted-frameworks en de Tcl-gebeurtenisimplementatie, maar de gebeurtenislus in Node.js is verborgen voor de ontwikkelaar en lijkt op het afhandelen van gebeurtenissen in een webtoepassing die wordt uitgevoerd in browser. Bij het schrijven van applicaties voor node.js moet u bijvoorbeeld rekening houden met de specifieke kenmerken van gebeurtenisgestuurd programmeren in plaats van "var result = db.query("select..");" met wachten op voltooiing van het werk en daaropvolgende verwerking van resultaten, gebruikt Node.js het principe van asynchrone uitvoering, d.w.z. de code wordt getransformeerd in "db.query("select..", function (result) {result processing});", waarin de besturing onmiddellijk wordt doorgegeven aan verdere code, en het queryresultaat wordt verwerkt zodra er gegevens binnenkomen.

Bron: opennet.ru

Voeg een reactie