Vydání JavaScriptu Node.js 17.0 na straně serveru

Proběhlo vydání Node.js 17.0, platformy pro spouštění síťových aplikací v JavaScriptu. Node.js 17.0 je běžná větev podpory s aktualizacemi do června 2022. V nejbližších dnech bude dokončena stabilizace větve Node.js 16, která získá status LTS a bude podporována do dubna 2024. Údržba předchozí větve Node.js 14.0 LTS potrvá do dubna 2023 a předchozí větve 12.0 LTS do dubna 2022.

Hlavní vylepšení:

  • Motor V8 byl aktualizován na verzi 9.5.
  • Pokračovala implementace variant základního API založených na využití asynchronního výpočetního rozhraní Promise. Kromě dříve navrhovaných API Timers Promises a Streams Promises, Node.js 17.0 zavádí Readline Promise API pro čtení dat řádek po řádku pomocí modulu readline. import * jako readline z 'node:readline/promises'; import { stdin jako vstup, stdout jako výstup } z 'procesu'; const rl = readline.createInterface({ vstup, výstup }); const answer = wait rl.question('Co si myslíš o Node.js?'); console.log('Děkujeme za vaši cennou zpětnou vazbu: ${answer}'); rl.close();
  • Dodávaná knihovna OpenSSL byla aktualizována na verzi 3.0 (pomocí vidlice quictls/openssl s povolenou podporou protokolu QUIC).
  • Ujistěte se, že verze Node.js je zobrazena v trasování zásobníku pro závažné chyby, které způsobují ukončení aplikace.

Dodatečně lze zmínit odstranění dvou zranitelností v současných větvích Node.js (CVE-2021-22959, CVE-2021-22960), které umožňují provádět útoky třídy HTTP Request Smuggling (HRS), které umožňují prostřednictvím zasílání speciálně navržených požadavků klienta vklínit se do obsahu požadavků jiných uživatelů zpracovávaných ve stejném vlákně mezi frontend a backend (můžete například dosáhnout nahrazení škodlivého kódu JavaScript v relaci jiného uživatele). Podrobnosti budou odhaleny později, ale zatím se ví pouze to, že problémy jsou způsobeny nesprávným zacházením s mezerami mezi názvem hlavičky HTTP a dvojtečkou a také odlišným zacházením se znaky návratu vozíku a řádků v bloku parametrů použitém při předávání tělo požadavku v blocích v "chunked" režimu. ".

Připomeňme, že platformu Node.js lze použít jak pro serverovou údržbu webových aplikací, tak pro vytváření běžných klientských a serverových síťových programů. Pro rozšíření funkcionality aplikací pro Node.js je připravena velká kolekce modulů, ve kterých naleznete moduly s implementací HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 servery a klienty, moduly pro integraci s různými webovými frameworky, obslužnými nástroji WebSocket a Ajax, DBMS konektory (MySQL, PostgreSQL, SQLite, MongoDB), šablonovacími engine, CSS engine, implementacemi kryptografických algoritmů a autorizačních systémů (OAuth), XML parsery.

Aby bylo zajištěno zpracování velkého počtu paralelních požadavků, používá Node.js asynchronní model spouštění kódu založený na neblokujícím zpracování událostí a definici obslužných rutin zpětného volání. Podporované metody pro multiplexní připojení jsou epoll, kqueue, /dev/poll a select. Pro multiplexování připojení se používá knihovna libuv, což je doplněk pro libev na systémech Unix a IOCP na Windows. Knihovna libeio se používá k vytvoření fondu vláken a c-ares je integrován pro provádění DNS dotazů v neblokujícím režimu. Všechna systémová volání, která způsobují blokování, jsou prováděna uvnitř fondu vláken a poté, jako obslužné rutiny signálů, přenášejí výsledek své práce zpět přes nepojmenovanou rouru (rouru). Spouštění kódu JavaScript je zajištěno pomocí enginu V8 vyvinutého společností Google (Microsoft navíc vyvíjí verzi Node.js s enginem Chakra-Core).

Ve svém jádru je Node.js podobný Perl AnyEvent, Ruby Event Machine, Python Twisted frameworkům a implementaci událostí Tcl, ale smyčka událostí v Node.js je před vývojářem skrytá a připomíná zpracování událostí ve spuštěné webové aplikaci. v prohlížeči. Při psaní aplikací pro node.js musíte vzít v úvahu specifika programování řízeného událostmi, například místo toho, abyste dělali "var result = db.query("select..");" s čekáním na dokončení práce a následným zpracováním výsledků využívá Node.js princip asynchronního provádění, tzn. kód se transformuje na "db.query("select..", funkce (výsledek) {zpracování výsledku});", ve kterém řízení okamžitě přejde na další kód a výsledek dotazu bude zpracován, jakmile data dorazí.

Zdroj: opennet.ru

Přidat komentář