Izlazak serverske JavaScript platforme Node.js 17.0

Objavljen je Node.js 17.0, platforma za izvođenje mrežnih aplikacija napisanim u JavaScriptu. Node.js 17.0 pripada grani s uobičajenim razdobljem podrške, a ažuriranja će se izdavati do lipnja 2022. U sljedećim danima završit će stabilizacija grane Node.js 16, koja će dobiti LTS status i bit će podržavana do travnja 2024. Održavanje prethodne LTS grane Node.js 14.0 trajat će do travnja 2023., dok će se prošle LTS grane 12.0 održavati do travnja 2022.

Glavna poboljšanja:

  • V8 motor je ažuriran na verziju 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();
  • Pružena biblioteka OpenSSL je ažurirana na verziju 3.0 (koristi se fork quictls/openssl s uključenom podrškom za QUIC protokol).
  • Osigurano je prikazivanje verzije Node.js u stogovima tragova generiranim u slučaju fatalnih grešaka koje dovode do prekida rada aplikacije.

Dodatno, treba spomenuti da su u aktualnim granama Node.js riješene dvije ranjivosti (CVE-2021-22959, CVE-2021-22960) koje omogućuju napade klase 'HTTP Request Smuggling' (HRS), omogućujući umetanje posebno formatiranih klijentskih zahtjeva u sadržaj zahtjeva drugih korisnika obrađivanih u istom toku između frontenda i backend. (Na primjer, može se postići umetanje zlonamjernog JavaScript koda u sesiju drugog korisnika). Detalji će biti objavljeni kasnije, a zasad je poznato samo to da su problemi uzrokovani neispravnim tretmanom razmaka između imena HTTP zaglavlja i dvotočke, kao i različitim tretmanom povratnih znakova i znakova novog reda u bloku parametara koji se koristi pri prijenosu tijela zahtjeva u dijelovima u 'chunked' modu.

Podsjetimo, platforma Node.js može se koristiti za serversko održavanje web aplikacija, kao i za izradu običnih klijentskih i serverskih mrežnih programa. Za proširenje funkcionalnosti aplikacija za Node.js pripremljena je velika kolekcija modula, u kojoj se mogu naći moduli s implementacijom. poslužitelja i klijenata HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduli za integraciju s raznim web okvirima, obrada WebSocket i Ajax, konektori za baze podataka (MySQL, PostgreSQL, SQLite, MongoDB), predlošci, CSS motori, implementacije kriptoalgoritama i sustava autentifikacije (OAuth), XML parseri.

Za osiguranje obrade velikog broja paralelnih zahtjeva, Node.js koristi asinkroni model pokretanja koda, koji se temelji na obradi događaja u neblokirajućem modu i definiranju callback handlera. Kao metode multiplexiranja veza podržavaju se različite metode poput epoll, kqueue, /dev/poll i select. Za multiplexiranje veza koristi se knjižnica libuv, koja je nadogradnja na libev u Unix sustavima i na IOCP u Windowsu. Za izradu skupa niti (thread pool) koristi se knjižnica libeio, a za izvršavanje DNS upita u neblokirajućem modu integriran je c-ares. Svi sustavni pozivi koji uzrokuju blokiranje izvode se unutar skupa niti i zatim, kao i handleri signala, vraćaju rezultat svog rada putem anonimnog kanala (pipe). Izvršavanje JavaScript koda osigurava se korištenjem motora V8 razvijenog od strane kompanije Google (dodatno, Microsoft razvija varijantu Node.js s motorom Chakra-Core).

Node.js je po svojoj suštini sličan Perl AnyEvent, Ruby Event Machine, Python Twisted i implementaciji događaja u Tkl-u, ali je ciklus obrade događaja (event loop) u Node.js skriven od programera i podseća na obradu događaja u web-aplikaciji koja radi u pretraživaču. Kada pišete aplikacije za Node.js, morate uzeti u obzir specifičnosti programiranja usmjerenog na događaje; na primer, umesto izvršavanja „var result = db.query(„select..“);“ uz čekanje na završetak rada i kasniju obradu rezultata, Node.js koristi princip asinhronog izvršavanja, tj. kod se transformiše u „db.query(„select..“, function (result) {obrada rezultata});“, pri čemu će kontrola odmah preći na dalji kod, a rezultat upita će se obraditi kako podaci pristižu.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster