Izdanje JavaScript Node.js 17.0 na strani poslužitelja

Objavljena je Node.js 17.0, platforma za pokretanje mrežnih aplikacija u JavaScriptu. Node.js 17.0 redovita je grana podrške koja će nastaviti primati ažuriranja do lipnja 2022. U narednim danima bit će dovršena stabilizacija grane Node.js 16, koja će dobiti LTS status i bit će podržana do travnja 2024. godine. Održavanje prethodne LTS grane Node.js 14.0 trajat će do travnja 2023., a pretprošle LTS grane 12.0 do travnja 2022.

Glavna poboljšanja:

  • V8 motor ažuriran je na verziju 9.5.
  • Nastavljena je implementacija varijanti osnovnog API-ja temeljenog na korištenju Promise asinkronog računalnog sučelja. Uz prethodno ponuđene API-je 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 readline iz 'node:readline/promises'; import { stdin kao ulaz, stdout kao izlaz } iz 'procesa'; const rl = readline.createInterface({ ulaz, izlaz}); const answer = await rl.question('Što mislite o Node.js?'); console.log('Hvala vam na vrijednim povratnim informacijama: ${answer}'); rl.zatvori();
  • Isporučena OpenSSL biblioteka ažurirana je na verziju 3.0 (koristi se quictls/openssl fork s omogućenom podrškom za QUIC protokol).
  • Omogućeno je da se verzija Node.js prikazuje u tragovima stoga koji se izlaze u slučaju fatalnih pogrešaka koje uzrokuju prekid aplikacije.

Dodatno, možemo spomenuti uklanjanje dviju ranjivosti u trenutnim granama Node.js (CVE-2021-22959, CVE-2021-22960), koje omogućuju izvođenje napada “HTTP Request Smuggling” (HRS), koji omogućuju nam da se umetnemo u sadržaje zahtjeva drugih korisnika koji se obrađuju u istoj niti između sučelja i pozadine (na primjer, zlonamjerni JavaScript kod može se umetnuti u sesiju drugog korisnika). Detalji će biti otkriveni kasnije, ali za sada samo znamo da su problemi uzrokovani neispravnim rukovanjem razmacima između naziva HTTP zaglavlja i dvotočke, kao i različitim rukovanjem znakovima za povratak na početak i pomak u novi red u bloku parametara koji se koristi prilikom prijenosa tijelo zahtjeva u dijelovima u "razdijeljenom" načinu "

Podsjetimo se da se Node.js platforma može koristiti i za poslužiteljsku podršku web aplikacija i za kreiranje običnih klijentskih i poslužiteljskih mrežnih programa. Za proširenje funkcionalnosti aplikacija za Node.js pripremljena je velika zbirka modula u kojoj možete pronaći module s implementacijom HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 poslužitelja i klijenata, module za integraciju s raznim web okvirima, WebSocket i Ajax rukovateljima, konektorima za DBMS (MySQL, PostgreSQL, SQLite, MongoDB), predlošcima, CSS motorima, implementacijama kriptografskih algoritama i autorizacijskim sustavima (OAuth), XML parserima.

Kako bi se osigurala obrada velikog broja paralelnih zahtjeva, Node.js koristi model izvršavanja asinkronog koda koji se temelji na rukovanju događajima bez blokiranja i definiciji rukovatelja povratnim pozivom. 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 sustavima i IOCP na Windowsima. Biblioteka libeio koristi se za stvaranje skupa niti, a c-ares je integriran za izvođenje DNS upita u načinu rada bez blokiranja. Svi sistemski pozivi koji uzrokuju blokiranje izvršavaju se unutar skupa niti i zatim, poput rukovatelja signalima, prenose rezultat svog rada natrag kroz neimenovanu cijev (pipe). Izvršenje JavaScript koda omogućeno je korištenjem V8 motora koji je razvio Google (pored toga, Microsoft razvija verziju Node.js s Chakra-Core motorom).

U svojoj srži, Node.js je sličan Perl AnyEvent, Ruby Event Machine, Python Twisted okvirima i Tcl implementaciji događaja, ali petlja događaja u Node.js skrivena je od programera i nalikuje rukovanju događajima u pokrenutoj web aplikaciji u pregledniku. Kada pišete aplikacije za node.js, trebate 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 asinkronog izvođenja, tj. kod se transformira u "db.query("select..", function (result) {result processing});", u kojem će kontrola trenutno prijeći na daljnji kod, a rezultat upita će se obrađivati ​​kako podaci stignu.

Izvor: opennet.ru

Dodajte komentar