Rilascio della piattaforma server JavaScript Node.js 17.0

È stata rilasciata la versione 17.0 di Node.js, la piattaforma per l'esecuzione di applicazioni web in JavaScript. Node.js 17.0 appartiene al ramo con supporto comune, il cui aggiornamento sarà disponibile fino a giugno 2022. Nei prossimi giorni sarà completata la stabilizzazione del ramo Node.js 16, che riceverà lo stato LTS e sarà supportato fino ad aprile 2024. Il supporto per il precedente ramo LTS Node.js 14.0 durerà fino ad aprile 2023, mentre il ramo LTS precedente 12.0 fino ad aprile 2022.

Principali miglioramenti:

  • Il motore V8 è stato aggiornato alla versione 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();
  • La libreria OpenSSL fornita è stata aggiornata alla versione 3.0 (utilizzando un fork di quictls/openssl con supporto per il protocollo QUIC attivato).
  • È stata garantita l'uscita della versione di Node.js nei tracciamenti dello stack, visualizzati in caso di errori fatali che portano alla chiusura dell'applicazione.

In aggiunta, si possono menzionare la correzione di due vulnerabilità nelle versioni attuali di Node.js (CVE-2021-22959, CVE-2021-22960), che consentono attacchi di tipo "HTTP Request Smuggling" (HRS), permettendo di inserire contenuti di richieste di altri utenti all'interno di richieste fatte con apposite formulazioni, elaborate nella stessa sequenza tra frontend e backend (ad esempio, è possibile iniettare codice JavaScript malevolo nella sessione di un altro utente). I dettagli saranno rivelati in seguito, mentre al momento si sa solo che i problemi derivano da un'errata gestione degli spazi tra il nome dell'intestazione HTTP e i due punti, così come dalla diversa gestione dei caratteri di ritorno a capo e di nuova riga nel blocco di parametri utilizzato per la trasmissione del corpo della richiesta in modalità "chunked".

Ricordiamo che la piattaforma Node.js può essere utilizzata sia per supportare il funzionamento di applicazioni web server, sia per creare normali programmi client e server. Per ampliare le funzionalità delle applicazioni Node.js è stata preparata una vasta collezione di moduli, in cui è possibile trovare moduli con implementazioni. server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per integrazioni con diversi framework web, gestori WebSocket e Ajax, connettori a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motori di templating, motori CSS, implementazioni di algoritmi crittografici e sistemi di autorizzazione (OAuth), parser XML.

Per garantire l'elaborazione di un gran numero di richieste parallele, Node.js utilizza un modello di esecuzione del codice asincrono, basato sulla gestione degli eventi in modalità non bloccante e sulla definizione di gestori di callback. Come metodi di multiplexing delle connessioni, sono supportati metodi come epoll, kqueue, \/dev\/poll e select. Per il multiplexing delle connessioni viene utilizzata la libreria libuv, che è un'astrazione sopra libev nei sistemi Unix e sopra IOCP in Windows. Per creare un pool di thread viene utilizzata la libreria libeio, mentre per eseguire richieste DNS in modalità non bloccante è integrato c-ares. Tutti le chiamate di sistema che causano bloccaggi vengono eseguite all'interno del pool di thread e quindi, come i gestori di segnali, trasmettono il risultato del loro lavoro indietro attraverso un canale non nominato (pipe). L'esecuzione del codice JavaScript è garantita dall'utilizzo del motore V8 sviluppato da Google (in aggiunta Microsoft sviluppa una variante di Node.js con il motore Chakra-Core).

Fondamentalmente, Node.js è simile ai framework Perl AnyEvent, Ruby Event Machine, Python Twisted e all'implementazione degli eventi in Tcl, ma il ciclo di gestione degli eventi (event loop) in Node.js è nascosto agli sviluppatori e ricorda la gestione degli eventi in un'applicazione web che opera nel browser. Quando si scrivono applicazioni per Node.js, è necessario considerare le specificità della programmazione orientata agli eventi; ad esempio, invece di eseguire "var result = db.query('select...');" attendendo il completamento e la successiva elaborazione dei risultati, Node.js utilizza il principio dell'esecuzione asincrona, ossia il codice si trasforma in "db.query('select...', function (result) {elaborazione del risultato});", dove il controllo passa immediatamente al codice successivo e il risultato della query viene elaborato man mano che i dati diventano disponibili.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster