Vydání serverové JavaScriptové platformy Node.js 17.0.

Byl vydán Node.js 17.0, platforma pro provádění síťových aplikací v jazyce JavaScript. Node.js 17.0 patří do pravidelného cyklu podpory, jehož aktualizace budou vydávány do června 2022. V následujících dnech bude dokončena stabilizace větve Node.js 16, která získá status LTS a bude podporována do dubna 2024. Podpora předchozí větve LTS, Node.js 14.0, potrvá do dubna 2023, a starší LTS větev 12.0 do dubna 2022.

Hlavní vylepšení:

  • Engin V8 byl aktualizován na verzi 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();
  • Dodávaná knihovna OpenSSL byla aktualizována na verzi 3.0 (byla použita úprava quictls/openssl se zapnutou podporou protokolu QUIC).
  • Bylo zajištěno vypisování verze Node.js ve stoptrace, která je generována v případě fatálních chyb, vedoucích k ukončení aplikace.

Dále lze zmínit odstranění dvou zranitelností v aktuálních větvích Node.js (CVE-2021-22959, CVE-2021-22960), které umožňují útoky známé jako „HTTP Request Smuggling“ (HRS), které dovolují pomocí speciálně vytvořených klientských požadavků zasahovat do obsahu požadavků ostatních uživatelů zpracovávaných ve stejném vlákně mezi front-endem a back-endem (například lze dosáhnout vložení škodlivého JavaScriptového kódu do relace jiného uživatele). Podrobnosti budou zveřejněny později, zatím je známo pouze to, že problémy byly způsobeny nesprávným zpracováním mezer mezi názvem HTTP hlavičky a dvojtečkou, stejně jako různým zpracováním znaků návratu vozíku a nového řádku v bloku parametrů používaném při předávání těla požadavku po částech v režimu „chunked“.

Připomínáme, že platforma Node.js může být použita jak pro serverové zajištění běhu 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 byla připravena rozsáhlá kolekce modulů, ve které lze najít moduly s implementací servery a klientů HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduly pro integraci s různými webovými frameworky, zpracovatele WebSocket a Ajax, konektory k databázím (MySQL, PostgreSQL, SQLite, MongoDB), šablonovací enginy, CSS frameworky, implementace kryptografických algoritmů a systémů autorizace (OAuth), XML parsery.

Aby Node.js zvládl zpracování velkého počtu paralelních požadavků, využívá asynchronní model spouštění kódu založený na zpracování událostí v nezablokovaném režimu a určení callback-handlerů. Mezi metody multiplexování spojení patří epoll, kqueue, /dev/poll a select. Pro multiplexování spojení se používá knihovna libuv, která je nadstavbou nad libev v systémech Unix a nad IOCP ve Windows. Pro vytvoření vlákna (thread pool) se využívá knihovna libeio a pro provádění DNS dotazů v nezablokovaném režimu je integrován c-ares. Všechny systémové výzvy, které způsobují blokaci, jsou prováděny uvnitř vlákna a následně, stejně jako zpracovatelé signálů, předávají výsledek své práce zpět prostřednictvím anonymního kanálu (pipe). Provádění JavaScriptového kódu je zajišťováno prostřednictvím využití motoru V8 vyvinutého společností Google (navíc Microsoft vyvíjí variantu Node.js s motorem Chakra-Core).

Node.js je v podstatě podobný frameworkům Perl AnyEvent, Ruby Event Machine, Python Twisted a událostem implementovaným v Tcl, avšak event loop v Node.js je skrytý před vývojářem a připomíná zpracování událostí ve webové aplikaci běžící v prohlížeči. Při psaní aplikací pro Node.js je třeba vzít v úvahu specifika událostmi orientovaného programování, například místo provádění 'var result = db.query("select..")' s čekáním na dokončení a následným zpracováním výsledků, Node.js používá princip asynchronního provádění, tj. kód se transformuje na 'db.query("select..", function(result) {zpracování výsledku});', kdy se řízení okamžitě přesune na další kód a výsledek dotazu bude zpracován, jakmile budou data k dispozici.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster