Strežniška izdaja JavaScript Node.js 17.0

Izšla je Node.js 17.0, platforma za izvajanje omrežnih aplikacij v JavaScriptu. Node.js 17.0 je redna veja podpore s posodobitvami do junija 2022. V naslednjih dneh bo končana stabilizacija veje Node.js 16, ki bo prejela status LTS in bo podprta do aprila 2024. Vzdrževanje prejšnje veje Node.js 14.0 LTS bo trajalo do aprila 2023, prejšnje veje 12.0 LTS pa do aprila 2022.

Glavne izboljšave:

  • Motor V8 je posodobljen na različico 9.5.
  • Nadaljevala se je implementacija različic osnovnega API-ja, ki temelji na uporabi asinhronega računalniškega vmesnika Promise. Poleg predhodno predlaganih API-jev Timers Promises in Streams Promises Node.js 17.0 uvaja API Readline Promise za branje podatkov vrstico za vrstico z uporabo modula readline. uvoz * kot readline iz 'node:readline/promises'; import { stdin kot vhod, stdout kot izhod } iz 'procesa'; const rl = readline.createInterface({ vnos, izhod }); const answer = await rl.question('Kaj menite o Node.js?'); console.log('Hvala za vaše dragocene povratne informacije: ${answer}'); rl.close();
  • Priložena knjižnica OpenSSL je bila posodobljena na različico 3.0 (z uporabo razcepa quictls/openssl z omogočeno podporo za protokol QUIC).
  • Prepričajte se, da je različica Node.js prikazana v sledeh sklada za usodne napake, zaradi katerih se aplikacija prekine.

Dodatno lahko omenimo odpravo dveh ranljivosti v trenutnih vejah Node.js (CVE-2021-22959, CVE-2021-22960), ki omogočata izvajanje napadov razreda HTTP Request Smuggling (HRS), ki omogočajo, da se s pošiljanjem posebej zasnovanih zahtev odjemalcev zagozdijo v vsebino zahtev drugih uporabnikov, obdelanih v isti niti med sprednjim in zadnjim delom (na primer, lahko dosežete zamenjavo zlonamerne kode JavaScript v seji drugega uporabnika). Podrobnosti bodo razkrite pozneje, za zdaj pa je znano le, da težave povzročajo nepravilno ravnanje s presledki med imenom glave HTTP in dvopičjem ter različno ravnanje z znaki za vrnitev na začetek in za pomik vrstice v bloku parametrov, ki se uporablja pri podajanju telo zahteve v kosih v "razdeljenem" načinu.

Spomnimo se, da se lahko platforma Node.js uporablja tako za strežniško vzdrževanje spletnih aplikacij kot za ustvarjanje navadnih odjemalskih in strežniških omrežnih programov. Za razširitev funkcionalnosti aplikacij za Node.js je bila pripravljena velika zbirka modulov, v kateri najdete module z implementacijo HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 strežnikov in odjemalcev, module za integracijo z različnimi spletnimi okviri, upravljalniki WebSocket in Ajax, konektorji DBMS (MySQL, PostgreSQL, SQLite, MongoDB), mehanizmi za predloge, motorji CSS, implementacijami kripto algoritmov in avtorizacijskih sistemov (OAuth), razčlenjevalniki XML.

Da bi zagotovil obdelavo velikega števila vzporednih zahtev, Node.js uporablja model izvajanja asinhrone kode, ki temelji na neblokirni obravnavi dogodkov in definiciji obdelovalcev povratnih klicev. Podprte metode za multipleksiranje povezav so epoll, kqueue, /dev/poll in select. Za multipleksiranje povezav se uporablja knjižnica libuv, ki je dodatek za libev v sistemih Unix in IOCP v sistemu Windows. Knjižnica libeio se uporablja za ustvarjanje skupine niti, c-ares pa je integriran za izvajanje poizvedb DNS v načinu brez blokiranja. Vsi sistemski klici, ki povzročijo blokado, se izvedejo znotraj področja niti in nato, kot upravljalci signalov, prenesejo rezultat svojega dela nazaj skozi neimenovano cev (pipe). Izvajanje kode JavaScript je zagotovljeno z uporabo motorja V8, ki ga je razvil Google (poleg tega Microsoft razvija različico Node.js z motorjem Chakra-Core).

V svojem jedru je Node.js podoben ogrodjem Perl AnyEvent, Ruby Event Machine, Python Twisted in implementaciji dogodkov Tcl, vendar je zanka dogodkov v Node.js skrita pred razvijalcem in je podobna obravnavanju dogodkov v delujoči spletni aplikaciji v brskalniku. Ko pišete aplikacije za node.js, morate na primer upoštevati posebnosti programiranja, ki temelji na dogodkih, namesto da naredite "var result = db.query("select..");" s čakanjem na zaključek dela in kasnejšo obdelavo rezultatov Node.js uporablja princip asinhronega izvajanja, tj. koda se preoblikuje v "db.query("select..", function (result) {result processing});", v katerem bo nadzor takoj prešel na nadaljnjo kodo, rezultat poizvedbe pa bo obdelan, ko podatki prispejo.

Vir: opennet.ru

Dodaj komentar