Versiunea JavaScript Node.js 17.0 la nivelul serverului

A avut loc lansarea Node.js 17.0, o platformă pentru executarea aplicațiilor de rețea în JavaScript. Node.js 17.0 este o ramură de asistență obișnuită cu actualizări până în iunie 2022. În zilele următoare va fi finalizată stabilizarea ramului Node.js 16, care va primi statutul LTS și va fi susținută până în aprilie 2024. Întreținerea ramurii anterioare Node.js 14.0 LTS va dura până în aprilie 2023, iar ramura anterioară 12.0 LTS până în aprilie 2022.

Principalele îmbunătățiri:

  • Motorul V8 a fost actualizat la versiunea 9.5.
  • Implementarea variantelor API-ului de bază bazate pe utilizarea interfeței de calcul asincrone Promise a continuat. În plus față de API-urile Timers Promises și Streams Promises propuse anterior, Node.js 17.0 introduce API-ul Readline Promise pentru citirea datelor rând cu linie folosind modulul readline. import * ca readline din 'node:readline/promises'; import { stdin ca intrare, stdout ca ieșire } din 'proces'; const rl = readline.createInterface({ input, output }); const answer = await rl.question('Ce parere ai despre Node.js?'); console.log('Vă mulțumim pentru feedback-ul dvs. valoros: ${answer}'); rl.close();
  • Biblioteca OpenSSL furnizată a fost actualizată la versiunea 3.0 (folosind furca quictls/openssl cu suportul protocolului QUIC activat).
  • Asigurați-vă că versiunea Node.js este afișată în urmele stivei pentru erori fatale care provoacă închiderea aplicației.

În plus, putem aminti eliminarea a două vulnerabilități din ramurile actuale ale Node.js (CVE-2021-22959, CVE-2021-22960), care fac posibilă efectuarea de atacuri ale clasei HTTP Request Smuggling (HRS), care permite, prin trimiterea de cereri client special concepute, să se pătrundă în conținutul solicitărilor de la alți utilizatori procesate în același fir între frontend și backend (de exemplu, puteți obține înlocuirea codului JavaScript rău intenționat în sesiunea altui utilizator). Detaliile vor fi dezvăluite mai târziu, dar deocamdată se știe doar că problemele sunt cauzate de gestionarea incorectă a spațiilor dintre numele antetului HTTP și două puncte, precum și de gestionarea diferită a caracterelor de returnare a căruciorului și de avans de linie în blocul de parametri utilizat la trecere. corpul cererii în bucăți în modul „în bucăți”.

Amintiți-vă că platforma Node.js poate fi utilizată atât pentru întreținerea pe server a aplicațiilor Web, cât și pentru crearea de programe obișnuite de rețea client și server. Pentru a extinde funcționalitatea aplicațiilor pentru Node.js, a fost pregătită o colecție mare de module, în care puteți găsi module cu implementare HTTP, SMTP, XMPP, DNS, FTP, IMAP, servere și clienți POP3, module pentru integrare cu diverse cadre web, handlere WebSocket și Ajax, conectori DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motoare de șabloane, motoare CSS, implementări de algoritmi cripto și sisteme de autorizare (OAuth), parsere XML.

Pentru a asigura procesarea unui număr mare de solicitări paralele, Node.js folosește un model de execuție a codului asincron bazat pe gestionarea evenimentelor neblocante și pe definiția handlerelor de apel invers. Metodele acceptate pentru multiplexarea conexiunilor sunt epoll, kqueue, /dev/poll și select. Pentru multiplexarea conexiunii, se folosește biblioteca libuv, care este un add-on pentru libev pe sisteme Unix și IOCP pe Windows. Biblioteca libeio este folosită pentru a crea un pool de fire, iar c-ares este integrat pentru a efectua interogări DNS în modul neblocant. Toate apelurile de sistem care provoacă blocare sunt executate în interiorul pool-ului de fire și apoi, ca și manipulatorii de semnal, transferă rezultatul muncii lor înapoi printr-o conductă (conductă) fără nume. Execuția codului JavaScript este asigurată prin utilizarea motorului V8 dezvoltat de Google (în plus, Microsoft dezvoltă o versiune de Node.js cu motorul Chakra-Core).

La bază, Node.js este similar cu Perl AnyEvent, Ruby Event Machine, cadrele Python Twisted și implementarea evenimentului Tcl, dar bucla de evenimente din Node.js este ascunsă de dezvoltator și seamănă cu gestionarea evenimentelor într-o aplicație web care rulează în browser. Când scrieți aplicații pentru node.js, trebuie să luați în considerare specificul programării bazate pe evenimente, de exemplu, în loc să faceți „var result = db.query(”select..”);” cu așteptarea finalizării lucrărilor și procesarea ulterioară a rezultatelor, Node.js folosește principiul execuției asincrone, adică. codul este transformat în „db.query(”select..”, function (result) {result processing});”, în care controlul va trece instantaneu la codul suplimentar, iar rezultatul interogării va fi procesat pe măsură ce sosesc datele.

Sursa: opennet.ru

Adauga un comentariu