Udgivelse af server JavaScript-platformen Node.js 17.0

Node.js 17.0 er udgivet, en platform til at køre netværksapplikationer skrevet i JavaScript. Node.js 17.0 tilhører en version med almindelig support, hvor opdateringer vil blive udgivet indtil juni 2022. Stabilisering af Node.js 16-versionen vil blive afsluttet i de kommende dage, og den vil få LTS-status og blive understøttet indtil april 2024. Støtten til den tidligere LTS-version Node.js 14.0 vil vare indtil april 2023, mens støtten til den før det, LTS-version 12.0, vil vare indtil april 2022.

Hovedforbedringer:

  • V8-motoren er opdateret til version 9.5.
  • Продолжена реализация вариантов базового 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();
  • Den medfølgende OpenSSL-bibliotek er opdateret til version 3.0 (en fork af quictls/openssl med indbygget support for QUIC-protokollen).
  • Versionen af Node.js er nu inkluderet i staktrace-outputtet, der genereres i tilfælde af fatale fejl, som fører til, at applikationen afsluttes.

Yderligere kan det nævnes, at to sårbarheder (CVE-2021-22959, CVE-2021-22960) er blevet rettet i de aktuelle Node.js-versioner. Disse sårbarheder muliggør angreb af typen "HTTP Request Smuggling" (HRS), der gør det muligt at infiltrere indholdet af andre brugeres anmodninger, der behandles i samme tråd mellem frontend og backend, ved at sende nøje udformede klientanmodninger (for eksempel kan det føre til indsprøjtning af skadelig JavaScript-kode i en anden brugers session). Detaljer vil blive offentliggjort senere, men det er allerede kendt, at problemerne skyldes forkert behandling af mellemrum mellem HTTP-header-navnet og kolon, samt forskellig behandling af carriage return og newline-tegn i parameterblokken, der bruges ved overførsel af anmodningskroppen i chunked-mode.

Vi minder om, at Node.js-platformen kan bruges både til serverhåndtering af webapplikationer samt til udvikling af almindelige klient- og serverbaserede netværksprogrammer. For at udvide applikationernes funktionalitet er der udarbejdet et stort bibliotek af moduler, hvor man kan finde moduler med implementering. servere og HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klienter, moduler til integration med forskellige web-rammer, WebSocket- og Ajax-håndterere, forbindelser til DBMS (MySQL, PostgreSQL, SQLite, MongoDB), templating-motorer, CSS-motorer, implementeringer af kryptografi-algoritmer og autorisationssystemer (OAuth), XML-parsere.

For the handling of a large number of parallel requests, Node.js utilizes an asynchronous code execution model based on event-driven, non-blocking I/O and the definition of callback handlers. It supports multiplexing methods such as epoll, kqueue, /dev/poll, and select. The libuv library, which acts as a wrapper over libev in Unix systems and IOCP in Windows, is used for connection multiplexing. A thread pool is created using the libeio library, and for performing non-blocking DNS queries, c-ares is integrated. All blocking system calls are executed within the thread pool and then, similar to signal handlers, relay their results back via an unnamed pipe. JavaScript code execution is facilitated through the V8 engine developed by Google (Microsoft also develops a Node.js variant with the Chakra-Core engine).

In essence, Node.js is similar to frameworks like Perl AnyEvent, Ruby Event Machine, Python Twisted, and the event implementation in Tcl, but the event loop in Node.js is abstracted from the developer, resembling the event handling in a web application running in a browser. When developing applications for Node.js, one must consider the aspects of event-driven programming; for instance, instead of executing "var result = db.query('select..');" while waiting for the operation to complete and subsequently handling results, Node.js employs asynchronous execution principles, meaning the code transforms to "db.query('select..', function (result) {result handling});" whereby control immediately passes to subsequent code while the result will be processed as data arrives.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster