Izlazak server platforme Node.js 17.0

Izvršena je objava Node.js 17.0, platforme za izvođenje mrežnih aplikacija napisano u JavaScript-u. Node.js 17.0 pripada grani sa redovnom podrškom, sa ažuriranjima koja će biti puštana do juna 2022. U narednim danima biće završena stabilizacija grane Node.js 16, koja će dobiti LTS status i biće podržavana do aprila 2024. Održavanje prethodne LTS grane Node.js 14.0 trajaće do aprila 2023, dok će prethodna LTS grana 12.0 biti podržavana do aprila 2022.

Glavne izboljšave:

  • 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();
  • Biblioteka OpenSSL uključena u paket je ažurirana na verziju 3.0 (koristi se fork quictls/openssl sa podrškom za QUIC protokol).
  • Obezbeđeno je prikazivanje verzije Node.js u stogovima praćenja generisanim u slučaju fatalnih grešaka koje uzrokuju prestanak rada aplikacije.

Dodatno se može napomenuti da su u aktuelnim granama Node.js otklonjene dve ranjivosti (CVE-2021-22959, CVE-2021-22960) koje omogućavaju napade tipa „HTTP Request Smuggling” (HRS), omogućavajući umetanje sadržaja specijalno formatiranih klijentaskih zahteva u zahteve drugih korisnika koji se obrađuju u istoj niti između frontenda i backend-a (na primer, može doći do umetanja malicioznog JavaScript koda u sesiju drugog korisnika). Detalji će biti otkriveni kasnije, a trenutno je poznato samo da su problemi uzrokovani nepravilnim tretmanom razmaka između imena HTTP zaglavlja i dvotačke, kao i različitim tretmanom povratnih karaktera i prelaza u novi red u bloku parametara koji se koristi za prenos tela zahteva u delovima u „chunked” režimu.

Podsećamo da se Node.js platforma može koristiti kako za serversku podršku web aplikacija, tako i za kreiranje običnih klijentskih i serverskih mrežnih programa. Za proširenu funkcionalnost aplikacija za Node.js pripremljena je velika kolekcija modula, koja sadrži module sa implementacijom strežnikov i HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 klijenata, module za integraciju sa raznim web okvirima, WebSocket i Ajax obradi, konektore za baze podataka (MySQL, PostgreSQL, SQLite, MongoDB), predloške, CSS motore, implementacije kriptoalgoritama i sistema autorizacije (OAuth), XML parsera.

Za obradnjo velikega števila vzporednih zahtevkov Node.js uporablja asinhroni model izvajanja kode, ki temelji na obdelavi dogodkov v neblokirnem načinu in določanju callback obdelovalcev. Kot načine multiplexiranja povezav podpira metode, kot so epoll, kqueue, /dev/poll in select. Za multiplexiranje povezav se uporablja knjižnica libuv, ki je nadgradnja nad libev v sistemih Unix in nad IOCP v Windows. Za ustvarjanje sklada niti (thread pool) se uporablja knjižnica libeio, za izvedbo DNS zahtevkov v neblokirnem načinu pa je integriran c-ares. Vsi sistemski klici, ki povzročajo blokado, se izvajajo v okviru sklada niti in nato, tako kot obdelovalci signalov, rezultat svojega dela pošljejo nazaj prek anonimne cevi (pipe). Izvajanje JavaScript kode omogoča vključen motor V8, ki ga je razvilo podjetje Google (dodatno Microsoft razvija različico Node.js z motorjem Chakra-Core).

Po svoji naravi je Node.js podoben okvirjem Perl AnyEvent, Ruby Event Machine, Python Twisted in izvedbi dogodkov v Tcl, vendar je cikel obdelave dogodkov (event loop) v Node.js skrit pred razvijalcem in spominja na obdelavo dogodkov v spletni aplikaciji, ki deluje v brskalniku. Pri pisanju aplikacij za Node.js je potrebno upoštevati posebnosti programiranja, usmerjenega na dogodke; na primer, namesto izvajanja 'var result = db.query('select..');' z čakanjem na zaključek dela in nadaljnjo obdelavo rezultatov, Node.js uporablja načelo asinhronega izvajanja, torej se koda preoblikuje v 'db.query('select..', function (result) {obdelava rezultata});', pri čemer se nadzor takoj prenese na nadaljnjo kodo, rezultat poizvedbe pa se obdeluje ob prihodu podatkov.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster