A kiszolgálóoldali JavaScript platform Node.js 17.0 kiadása

Megjelent a Node.js 17.0, a hálózati alkalmazások JavaScriptben futtatására szolgáló platform. A Node.js 17.0 egy szokásos támogatási ág, amely 2022 júniusáig továbbra is kap frissítéseket. A következő napokban befejeződik a Node.js 16 ág stabilizálása, amely LTS státuszt kap, és 2024 áprilisáig lesz támogatott. A Node.js 14.0 korábbi LTS-ágának karbantartása 2023 áprilisáig, a tavalyelőtti LTS 12.0-s ágának karbantartása pedig 2022 áprilisáig tart.

Főbb fejlesztések:

  • A V8-as motort a 9.5-ös verzióra frissítették.
  • Folytatódott az alap API változatainak megvalósítása a Promise aszinkron számítástechnikai interfészen alapulva. A korábban felajánlott Timers Promises és Streams Promises API-kon kívül a Node.js 17.0 bevezeti a Readline Promise API-t az adatok soronkénti olvasásához a readline modul használatával. import * readline-ként a 'node:readline/promises'-ból; import { stdin as input, stdout as output } from 'process'; const rl = readline.createInterface({ bemenet, kimenet }); const answer = várjon rl.question('Mi a véleménye a Node.js-ről?'); console.log('Köszönjük értékes visszajelzését: ${answer}'); rl.close();
  • A mellékelt OpenSSL könyvtár a 3.0-s verzióra frissült (egy quictls/openssl elágazást használnak a QUIC protokoll támogatásával).
  • Engedélyezte a Node.js verzió megjelenítését az alkalmazás leállását okozó végzetes hibák esetén megjelenő veremnyomokban.

Ezen kívül megemlíthető a Node.js jelenlegi ágaiban (CVE-2021-22959, CVE-2021-22960) található két sebezhetőség megszüntetése, amelyek lehetővé teszik a „HTTP Request Smuggling” (HRS) támadások végrehajtását, amelyek lehetővé teszi számunkra, hogy beékelődjünk más felhasználók kéréseinek tartalmába, amelyeket ugyanabban a szálban dolgoznak fel a frontend és a backend között (például rosszindulatú JavaScript-kód beilleszthető egy másik felhasználó munkamenetébe). Részletek később derülnek ki, de egyelőre csak annyit tudunk, hogy a problémákat a HTTP fejléc neve és a kettőspont közötti szóközök helytelen kezelése, valamint a továbbításkor használt paraméterblokkban a kocsivissza- és soremelés karakterek eltérő kezelése okozza. a kérés törzse részekben „csonkított” módban"

Emlékezzünk vissza, hogy a Node.js platform webes alkalmazások szerveroldali támogatására és hétköznapi kliens és szerver hálózati programok létrehozására egyaránt használható. A Node.js alkalmazások funkcionalitásának bővítésére egy nagy modulgyűjtemény készült, amelyben megtalálhatók a HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 szerverek és kliensek megvalósításával rendelkező modulok, az integrációhoz szükséges modulok különféle webes keretrendszerekkel, WebSocket és Ajax kezelőkkel, DBMS-hez csatlakozókkal (MySQL, PostgreSQL, SQLite, MongoDB), sablonmotorokkal, CSS motorokkal, kriptográfiai algoritmusok és engedélyezési rendszerek implementációival (OAuth), XML elemzőkkel.

Nagyszámú párhuzamos kérés feldolgozásának biztosítása érdekében a Node.js aszinkron kódvégrehajtási modellt használ, amely nem blokkoló eseménykezelésen és a visszahíváskezelők meghatározásán alapul. A kapcsolatok multiplexelésének támogatott módszerei az epoll, kqueue, /dev/poll és select. A kapcsolat multiplexeléséhez a libuv könyvtárat használják, amely a libev kiegészítője Unix rendszereken és IOCP Windows rendszeren. A libeio könyvtár szálkészlet létrehozására szolgál, a c-ares pedig integrálva van DNS-lekérdezések végrehajtásához nem blokkoló módban. Minden blokkolást okozó rendszerhívás a szálkészleten belül kerül végrehajtásra, majd a jelkezelőkhöz hasonlóan egy névtelen csőn (pipe) keresztül továbbítja a munkájuk eredményét. A JavaScript kód végrehajtását a Google által kifejlesztett V8-as motor biztosítja (a Microsoft emellett a Node.js egy verzióját is fejleszti Chakra-Core motorral).

Lényegében a Node.js hasonló a Perl AnyEvent, Ruby Event Machine, Python Twisted keretrendszerekhez és a Tcl eseménymegvalósításhoz, de a Node.js eseményhurok rejtve van a fejlesztő elől, és egy futó webalkalmazás eseménykezelésére hasonlít. böngészőben. Amikor alkalmazásokat ír a node.js számára, figyelembe kell vennie az eseményvezérelt programozás sajátosságait, például a "var result = db.query("select..");" a munka befejezésének várakozásával és az eredmények későbbi feldolgozásával a Node.js az aszinkron végrehajtás elvét használja, azaz. a kód átalakul "db.query("select..", függvény (eredmény) {eredményfeldolgozás});", amelyben a vezérlés azonnal átkerül a további kódra, és a lekérdezés eredménye az adatok beérkezésekor kerül feldolgozásra.

Forrás: opennet.ru

Hozzászólás