Uscita 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 standard, gli aggiornamenti per il quale saranno rilasciati fino a giugno 2022. Nei prossimi giorni si concluderà la stabilizzazione del ramo Node.js 16, che acquisirà lo status di LTS e sarà supportato fino ad aprile 2024. Il supporto per il precedente ramo LTS Node.js 14.0 continuerà fino ad aprile 2023, mentre per il ramo LTS 12.0 terminerà ad aprile 2022.

Miglioramenti principali:

  • 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 (utilizzato un fork quictls/openssl con supporto attivato per il protocollo QUIC).
  • È garantita l'uscita della versione di Node.js negli stack trace emessi in caso di errori fatali che portano alla chiusura dell'applicazione.

In aggiunta, si possono menzionare la risoluzione di due vulnerabilità nelle versioni attuali di Node.js (CVE-2021-22959, CVE-2021-22960) che consentono attacchi di tipo "HTTP Request Smuggling" (HRS). Questi attacchi permettono di infiltrarsi nel contenuto delle richieste di altri utenti, passando attraverso l'invio di richieste client specificamente formattate, quando vengono elaborate nella stessa connessione tra frontend e backend (ad esempio, si può inserire codice JavaScript malevolo in una sessione di un altro utente). I dettagli saranno rivelati in seguito; per ora, si sa solo che i problemi sono causati da un'errata gestione degli spazi tra il nome dell'intestazione HTTP e i due punti, oltre a diverse modalità di gestione dei caratteri di ritorno a capo e di fine linea nel blocco dei parametri utilizzato per il trasferimento del corpo della richiesta in modalità "chunked".

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

Per gestire un elevato numero di richieste parallele, Node.js utilizza un modello asincrono di esecuzione del codice, basato su un'architettura ad eventi in modalità non bloccante e sulla definizione di callback. Per il multiplexing delle connessioni, vengono supportati metodi come epoll, kqueue, /dev/poll e select. La libreria libuv, che funge da interfaccia sopra libev nei sistemi Unix e IOCP in Windows, viene utilizzata per il multiplexing delle connessioni. La libreria libeio è impiegata per creare un pool di thread, mentre c-ares è integrato per eseguire richieste DNS in modalità non bloccante. Tutti i syscalls bloccanti sono eseguiti all'interno del pool di thread e, come gli handler dei segnali, restituiscono i risultati delle loro operazioni tramite una pipe non nominata. L'esecuzione del codice JavaScript è garantita dall'utilizzo del motore V8 sviluppato da Google (in aggiunta, Microsoft sviluppa una versione di Node.js con il motore Chakra-Core).

In sostanza, 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 in Node.js è nascosto allo sviluppatore e ricorda la gestione degli eventi in un'applicazione web che opera nel browser. Quando si scrivono applicazioni per Node.js, è importante considerare le peculiarità della programmazione orientata agli eventi; per esempio, invece di eseguire "var result = db.query('select..');" aspettando il completamento e poi elaborando i risultati, in Node.js si utilizza il principio dell'esecuzione asincrona, ovvero il codice viene trasformato in "db.query('select..', function (result) {elaborazione del risultato});", permettendo così il passaggio immediato al codice successivo, mentre i risultati della query vengono elaborati man mano che i dati arrivano.

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