Versione JavaScript lato server Node.js 17.0

È stata rilasciata Node.js 17.0, una piattaforma per l'esecuzione di applicazioni di rete in JavaScript. Node.js 17.0 è un ramo di supporto regolare che continuerà a ricevere aggiornamenti fino a giugno 2022. Nei prossimi giorni verrà completata la stabilizzazione del branch Node.js 16, che riceverà lo status LTS e sarà supportato fino ad aprile 2024. La manutenzione del precedente ramo LTS di Node.js 14.0 durerà fino ad aprile 2023 e l'anno precedente all'ultimo ramo LTS 12.0 fino ad aprile 2022.

Principali miglioramenti:

  • Il motore V8 è stato aggiornato alla versione 9.5.
  • È proseguita l'implementazione di varianti dell'API di base basate sull'utilizzo dell'interfaccia di calcolo asincrono Promise. Oltre alle API Timers Promises e Streams Promises precedentemente offerte, Node.js 17.0 introduce l'API Readline Promise per leggere i dati riga per riga utilizzando il modulo readline. importa * come readline da 'node:readline/promises'; import { stdin come input, stdout come output } da 'process'; const rl = readline.createInterface({ input, output }); const risposta = attendono rl.question('Cosa ne pensi di Node.js?'); console.log('Grazie per il tuo prezioso feedback: ${answer}'); rl.chiudi();
  • La libreria OpenSSL fornita è stata aggiornata alla versione 3.0 (viene utilizzato un fork quictls/openssl con il supporto del protocollo QUIC abilitato).
  • Abilitata la visualizzazione della versione di Node.js nelle analisi dello stack che vengono restituite in caso di errori irreversibili che causano la chiusura dell'applicazione.

Inoltre, possiamo menzionare l’eliminazione di due vulnerabilità negli attuali rami di Node.js (CVE-2021-22959, CVE-2021-22960), che rendono possibile effettuare attacchi “HTTP Request Smuggling” (HRS), che permetterci di incunearci nei contenuti delle richieste di altri utenti elaborate nello stesso thread tra frontend e backend (ad esempio, codice JavaScript dannoso può essere inserito nella sessione di un altro utente). I dettagli verranno rivelati in seguito, ma per ora sappiamo solo che i problemi sono causati dalla gestione errata degli spazi tra il nome dell'intestazione HTTP e i due punti, nonché dalla diversa gestione dei caratteri di ritorno a capo e di avanzamento riga nel blocco di parametri utilizzato durante la trasmissione il corpo della richiesta in parti in modalità “chunked”"

Ricordiamo che la piattaforma Node.js può essere utilizzata sia per il supporto lato server di applicazioni Web, sia per la creazione di normali programmi di rete client e server. Per espandere la funzionalità delle applicazioni per Node.js, è stata preparata un'ampia raccolta di moduli, in cui è possibile trovare moduli con l'implementazione di server e client HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli per l'integrazione con vari framework web, gestori WebSocket e Ajax, connettori a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motori di template, 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 non bloccanti e sulla definizione di gestori di callback. I metodi supportati per le connessioni multiplex sono epoll, kqueue, /dev/poll e select. Per il multiplexing della connessione viene utilizzata la libreria libuv, che è un componente aggiuntivo per libev su sistemi Unix e IOCP su Windows. La libreria libeio viene utilizzata per creare un pool di thread e c-ares è integrato per eseguire query DNS in modalità non bloccante. Tutte le chiamate di sistema che causano il blocco vengono eseguite all'interno del pool di thread e quindi, come i gestori di segnali, trasferiscono il risultato del loro lavoro attraverso una pipe (pipe) senza nome. L'esecuzione del codice JavaScript avviene tramite l'utilizzo del motore V8 sviluppato da Google (inoltre Microsoft sta sviluppando una versione di Node.js con il motore Chakra-Core).

Fondamentalmente, Node.js è simile a Perl AnyEvent, Ruby Event Machine, Python Twisted framework e all'implementazione di eventi Tcl, ma il loop degli eventi in Node.js è nascosto allo sviluppatore e assomiglia alla gestione degli eventi in un'applicazione web in esecuzione nel browser. Quando si scrivono applicazioni per node.js, è necessario considerare le specifiche della programmazione basata sugli eventi, ad esempio, invece di fare "var result = db.query("select..");" con l'attesa del completamento del lavoro e la successiva elaborazione dei risultati, Node.js utilizza il principio dell'esecuzione asincrona, ovvero il codice viene trasformato in "db.query("seleziona..", funzione (risultato) {elaborazione risultato});", in cui il controllo passerà immediatamente a ulteriore codice e il risultato della query verrà elaborato all'arrivo dei dati.

Fonte: opennet.ru

Aggiungi un commento