Vydanie JavaScript Node.js 17.0 na strane servera

Bol vydaný Node.js 17.0, platforma na spúšťanie sieťových aplikácií v JavaScripte. Node.js 17.0 je pravidelná vetva podpory, ktorá bude naďalej dostávať aktualizácie až do júna 2022. V najbližších dňoch bude dokončená stabilizácia vetvy Node.js 16, ktorá získa štatút LTS a bude podporovaná do apríla 2024. Údržba predchádzajúcej vetvy LTS Node.js 14.0 potrvá do apríla 2023 a predminulá vetva LTS 12.0 do apríla 2022.

Hlavné vylepšenia:

  • Motor V8 bol aktualizovaný na verziu 9.5.
  • Pokračovalo sa v implementácii variantov základného API založených na použití asynchrónneho výpočtového rozhrania Promise. Okrem predtým ponúkaných API Timers Promises a Streams Promises, Node.js 17.0 predstavuje Readline Promise API na čítanie údajov riadok po riadku pomocou modulu readline. import * ako readline z 'node:readline/promises'; import { stdin ako vstup, stdout ako výstup } z 'procesu'; const rl = readline.createInterface({ vstup, výstup }); const answer = wait rl.question('Čo si myslíte o Node.js?'); console.log('Ďakujeme za vašu cennú spätnú väzbu: ${answer}'); rl.close();
  • Dodávaná knižnica OpenSSL bola aktualizovaná na verziu 3.0 (používa sa vidlica quictls/openssl s povolenou podporou protokolu QUIC).
  • Povolenie zobrazenia verzie Node.js v stopách zásobníka, ktoré sa vydávajú v prípade fatálnych chýb, ktoré spôsobia ukončenie aplikácie.

Dodatočne môžeme spomenúť odstránenie dvoch zraniteľností v súčasných vetvách Node.js (CVE-2021-22959, CVE-2021-22960), ktoré umožňujú vykonávať útoky „HTTP Request Smuggling“ (HRS), ktoré nám umožňujú vkliniť sa do obsahu požiadaviek iných používateľov spracovaných v rovnakom vlákne medzi frontend a backend (napríklad škodlivý kód JavaScript môže byť vložený do relácie iného používateľa). Podrobnosti budú odhalené neskôr, ale zatiaľ vieme len to, že problémy spôsobuje nesprávne spracovanie medzier medzi názvom hlavičky HTTP a dvojbodkou, ako aj odlišné zaobchádzanie so znakmi návratu vozíka a riadkov v bloku parametrov, ktorý sa používa pri prenose telo požiadavky po častiach v režime „kúskov“

Pripomeňme, že platformu Node.js možno použiť ako na serverovú údržbu webových aplikácií, tak aj na vytváranie bežných klientskych a serverových sieťových programov. Pre rozšírenie funkcionality aplikácií pre Node.js je pripravená veľká kolekcia modulov, v ktorých nájdete moduly s implementáciou HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 serverov a klientov, moduly pre integráciu s rôznymi webovými frameworkami, obslužnými nástrojmi WebSocket a Ajax, konektormi DBMS (MySQL, PostgreSQL, SQLite, MongoDB), nástrojmi na vytváranie šablón, nástrojmi CSS, implementáciami kryptografických algoritmov a autorizačných systémov (OAuth), analyzátormi XML.

Na zabezpečenie spracovania veľkého počtu paralelných požiadaviek používa Node.js asynchrónny model vykonávania kódu založený na neblokujúcom spracovaní udalostí a definícii obsluhy spätného volania. Podporované metódy pre multiplexné pripojenia sú epoll, kqueue, /dev/poll a select. Pre multiplexovanie pripojení sa používa knižnica libuv, ktorá je doplnkom pre libev na systémoch Unix a IOCP na Windows. Knižnica libeio sa používa na vytvorenie oblasti vlákien a c-ares je integrovaný na vykonávanie DNS dotazov v neblokujúcom režime. Všetky systémové volania, ktoré spôsobujú blokovanie, sa vykonávajú vo vnútri oblasti vlákien a potom, ako obslužné programy signálov, prenášajú výsledok svojej práce späť cez nepomenovanú rúrku (pipe). Spustenie kódu JavaScript je zabezpečené pomocou motora V8 vyvinutého spoločnosťou Google (okrem toho Microsoft vyvíja verziu Node.js s motorom Chakra-Core).

Vo svojom jadre je Node.js podobný rámcom Perl AnyEvent, Ruby Event Machine, Python Twisted a implementácii udalostí Tcl, ale slučka udalostí v Node.js je pred vývojárom skrytá a pripomína spracovanie udalostí vo webovej aplikácii, ktorá je spustená. v prehliadači. Pri písaní aplikácií pre node.js musíte vziať do úvahy špecifiká programovania riadeného udalosťami, napríklad namiesto toho, aby ste robili "var result = db.query("select..");" s čakaním na dokončenie práce a následným spracovaním výsledkov využíva Node.js princíp asynchrónneho vykonávania, t.j. kód sa transformuje na "db.query("select..", funkcia (výsledok) {spracovanie výsledku});", v ktorej riadenie okamžite prejde na ďalší kód a výsledok dotazu sa spracuje po príchode údajov.

Zdroj: opennet.ru

Pridať komentár