Lansarea platformei server JavaScript Node.js 17.0

A avut loc lansarea Node.js 17.0, o platformă pentru rularea aplicațiilor de rețea scrise în JavaScript. Node.js 17.0 face parte din ramura cu suport obișnuit, actualizările pentru care vor fi lansate până în iunie 2022. În zilele următoare, se va finaliza stabilizarea ramurii Node.js 16, care va primi statutul LTS și va fi susținută până în aprilie 2024. Suportul pentru vechea ramură LTS Node.js 14.0 va continua până în aprilie 2023, iar pentru ramura LTS anterioară 12.0 până în aprilie 2022.

Îmbunătățiri principale:

  • Motorul V8 a fost actualizat la versiunea 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();
  • Biblioteca OpenSSL livrată a fost actualizată la versiunea 3.0 (a fost folosit un fork quictls/openssl cu suport activat pentru protocolul QUIC).
  • A fost asigurată afișarea versiunii Node.js în traseele de stivă, afișate în cazul erorilor fatale care duc la închiderea aplicației.

De asemenea, se poate menționa eliminarea a două vulnerabilități în versiunile curente ale Node.js (CVE-2021-22959, CVE-2021-22960), care permit atacuri de tip „HTTP Request Smuggling” (HRS), permițând prin trimiterea de cereri client personalizate să se intercaleze în conținutul cererilor altor utilizatori gestionate în aceeași fir de execuție între frontend și backend (de exemplu, se poate obține înlocuirea codului JavaScript dăunător în sesiunea unui alt utilizator). Detalii vor fi dezvăluite mai târziu, însă este cunoscut că problemele sunt cauzate de manipularea incorectă a spațiilor dintre numele antetului HTTP și două puncte, precum și de prelucrarea diferită a caracterelor de întoarcere a cursului și a sfârșitului de linie în blocul de parametri, folosit la transmiterea corpului cererii în părți în modul „chunked”.

Reamintim că platforma Node.js poate fi utilizată atât pentru suportul serverului aplicațiilor web, cât și pentru crearea programelor de rețea client și server obișnuite. Pentru extinderea funcționalității aplicațiilor pentru Node.js, a fost pregătită o mare colecție de module, în care se pot găsi module cu implementarea servere și clienți HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, module pentru integrarea cu diverse framework-uri web, manejere WebSocket și Ajax, convertoare pentru baze de date (MySQL, PostgreSQL, SQLite, MongoDB), generatoare de șabloane, motoare CSS, implementări de algoritmi criptografici și sisteme de autorizare (OAuth), parsere XML.

Pentru a asigura procesarea unui număr mare de cereri paralele, Node.js utilizează un model asincron de execuție a codului, bazat pe procesarea evenimentelor în mod neblocat și pe definirea de callback-uri. Ca metode de multiplexare a conexiunilor sunt susținute metode precum epoll, kqueue, /dev/poll și select. Pentru multiplexarea conexiunilor se utilizează biblioteca libuv, care este o extensie a libev în sistemele Unix și a IOCP în Windows. Pentru crearea unui pool de thread-uri este folosită biblioteca libeio, iar pentru executarea cererilor DNS în mod neblocat este integrat c-ares. Toate apelurile sistemice care provoacă blocarea sunt executate în interiorul pool-ului de thread-uri și apoi, la fel ca manejerele de semnale, transmit rezultatul muncii lor înapoi printr-un canal anonim (pipe). Execuția codului JavaScript este asigurată prin implicarea motorului V8 dezvoltat de compania Google (în plus, Microsoft dezvoltă o variantă de Node.js cu motorul Chakra-Core).

În esență, Node.js este similar cu framework-urile Perl AnyEvent, Ruby Event Machine, Python Twisted și implementarea evenimentelor în Tcl, dar ciclul de procesare a evenimentelor (event loop) din Node.js este ascuns de dezvoltator și seamănă cu procesarea evenimentelor într-o aplicație web care rulează într-un browser. Atunci când scrieți aplicații pentru Node.js, trebuie să luați în considerare specificul programării orientate pe evenimente, de exemplu, în loc de a executa „var result = db.query(„select..”);” așteptând finalizarea operațiunii și prelucrarea ulterioară a rezultatelor, în Node.js se folosește principiul execuției asincrone, adică codul se transformă în „db.query(„select..”, function (result) {prelucrarea rezultatului});”, moment în care controlul va trece instantaneu la alt cod, iar rezultatul cererii va fi prelucrat pe măsură ce datele sosesc.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster