Izdanje JavaScript platforme na strani servera Node.js 17.0

Objavljena je Node.js 17.0, platforma za pokretanje mrežnih aplikacija u JavaScript-u. Node.js 17.0 je redovna grana podrške koja će nastaviti primati ažuriranja do juna 2022. U narednim danima će biti završena stabilizacija grane Node.js 16, koja će dobiti LTS status i biće podržana do aprila 2024. godine. Održavanje prethodne LTS grane Node.js 14.0 trajaće do aprila 2023., a pretprošle LTS grane 12.0 do aprila 2022. godine.

Glavna poboljšanja:

  • V8 motor je ažuriran na verziju 9.5.
  • Nastavljena je implementacija varijanti osnovnog API-ja zasnovanog na korišćenju Promise asinhronog računarskog interfejsa. Pored prethodno ponuđenih API-ja Timers Promises i Streams Promises, Node.js 17.0 uvodi Readline Promise API za čitanje podataka red po red pomoću modula readline. import * kao red za čitanje iz 'node:readline/promises'; import { stdin kao ulaz, stdout kao izlaz } iz 'procesa'; const rl = readline.createInterface({ ulaz, izlaz }); const answer = await rl.question('Šta mislite o Node.js?'); console.log('Hvala na vrijednim povratnim informacijama: ${answer}'); rl.close();
  • Isporučena OpenSSL biblioteka je ažurirana na verziju 3.0 (koristi se quictls/openssl fork sa omogućenom podrškom za QUIC protokol).
  • Omogućeno je prikazivanje verzije Node.js u tragovima steka koji se izlaze u slučaju fatalnih grešaka koje uzrokuju prekid aplikacije.

Dodatno, možemo spomenuti eliminaciju dvije ranjivosti u trenutnim granama Node.js (CVE-2021-22959, CVE-2021-22960), koje omogućavaju izvođenje “HTTP Request Smuggling” (HRS) napada, koji omogućavaju nam da uđemo u sadržaj zahtjeva drugih korisnika koji se obrađuju u istoj niti između frontenda i backenda (na primjer, zlonamjerni JavaScript kod može biti umetnut u sesiju drugog korisnika). Detalji će biti otkriveni kasnije, ali za sada znamo samo da su problemi uzrokovani nepravilnim rukovanjem razmacima između imena HTTP zaglavlja i dvotočke, kao i različitog rukovanja znakovima za povratak i pomicanje reda u bloku parametara koji se koristi prilikom prijenosa. tijelo zahtjeva u dijelovima u "usitnjenom" načinu "

Podsjetimo da se platforma Node.js može koristiti i za podršku web aplikacija na strani servera i za kreiranje običnih klijentskih i serverskih mrežnih programa. Za proširenje funkcionalnosti aplikacija za Node.js, pripremljena je velika zbirka modula u kojoj se mogu pronaći moduli sa implementacijom HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 servera i klijenata, moduli za integraciju sa raznim web okvirima, WebSocket i Ajax rukovaocima, konektorima za DBMS (MySQL, PostgreSQL, SQLite, MongoDB), šablonskim mašinama, CSS mašinama, implementacijama kriptografskih algoritama i sistema autorizacije (OAuth), XML parserima.

Da bi se osigurala obrada velikog broja paralelnih zahtjeva, Node.js koristi model izvršavanja asinhronog koda zasnovan na rukovanju događajima bez blokiranja i definiciji rukovatelja povratnim pozivima. Podržane metode za multipleksiranje veza su epoll, kqueue, /dev/poll i select. Za multipleksiranje veze koristi se biblioteka libuv, koja je dodatak za libev na Unix sistemima i IOCP na Windows. Biblioteka libeio se koristi za kreiranje spremišta niti, a c-ares je integriran za obavljanje DNS upita u neblokirajućem načinu. Svi sistemski pozivi koji uzrokuju blokiranje izvode se unutar spremišta niti, a zatim, kao rukovaoci signala, prenose rezultat svog rada nazad kroz neimenovanu cijev (cijev). Izvršenje JavaScript koda je obezbeđeno korišćenjem V8 motora koji je razvio Google (pored toga, Microsoft razvija verziju Node.js sa Chakra-Core motorom).

U svojoj srži, Node.js je sličan Perl AnyEvent, Ruby Event Machine, Python Twisted framework-u i Tcl implementaciji događaja, ali je petlja događaja u Node.js skrivena od programera i nalikuje rukovanju događajima u web aplikaciji koja radi u pretraživaču. Kada pišete aplikacije za node.js, morate uzeti u obzir specifičnosti programiranja vođenog događajima, na primjer, umjesto da radite "var result = db.query("select..");" uz čekanje završetka rada i naknadnu obradu rezultata, Node.js koristi princip asinhronog izvršavanja, tj. kod se transformira u "db.query("select..", function (result) {result processing});", u kojem će kontrola trenutno proći daljem kodu, a rezultat upita će biti obrađen kako podaci stignu.

izvor: opennet.ru

Dodajte komentar