Paglabas ng JavaScript Node.js 17.0 sa gilid ng server

Ang paglabas ng Node.js 17.0, isang platform para sa pagpapatupad ng mga aplikasyon ng network sa JavaScript, ay naganap. Ang Node.js 17.0 ay isang regular na sangay ng suporta na may mga update hanggang Hunyo 2022. Sa mga darating na araw, makukumpleto ang stabilization ng Node.js 16 branch, na tatanggap ng LTS status at susuportahan hanggang Abril 2024. Ang pagpapanatili ng nakaraang Node.js 14.0 LTS branch ay tatagal hanggang Abril 2023, at ang nakaraang 12.0 LTS branch hanggang Abril 2022.

Mga pangunahing pagpapabuti:

  • Ang V8 engine ay na-update sa bersyon 9.5.
  • Nagpatuloy ang pagpapatupad ng mga variant ng base API batay sa paggamit ng Promise asynchronous computing interface. Bilang karagdagan sa mga naunang iminungkahing Timers Promises and Streams Promises API, ipinakilala ng Node.js 17.0 ang Readline Promise API para sa pagbabasa ng data sa bawat linya gamit ang readline module. import * bilang readline mula sa 'node:readline/promises'; import { stdin bilang input, stdout bilang output } mula sa 'proseso'; const rl = readline.createInterface({input, output }); const answer = wait rl.question('Ano sa tingin mo ang Node.js?'); console.log('Salamat sa iyong mahalagang feedback: ${answer}'); rl.close();
  • Ang ibinigay na OpenSSL library ay na-update sa bersyon 3.0 (gamit ang quictls/openssl fork kung saan naka-enable ang QUIC protocol support).
  • Tiyakin na ang bersyon ng Node.js ay ipinapakita sa mga stack trace para sa mga nakamamatay na error na nagiging sanhi ng pagwawakas ng application.

Bilang karagdagan, maaari naming banggitin ang pag-aalis ng dalawang kahinaan sa kasalukuyang mga sangay ng Node.js (CVE-2021-22959, CVE-2021-22960), na ginagawang posible na magsagawa ng mga pag-atake ng HTTP Request Smuggling (HRS) na klase, na payagan, sa pamamagitan ng pagpapadala ng mga espesyal na idinisenyong kahilingan ng kliyente, na i-wedge sa nilalaman ng mga kahilingan mula sa ibang mga user na naproseso sa parehong thread sa pagitan ng frontend at backend (halimbawa, makakamit mo ang pagpapalit ng malisyosong JavaScript code sa session ng isa pang user). Ang mga detalye ay ihahayag sa ibang pagkakataon, ngunit sa ngayon ay malalaman lamang na ang mga problema ay sanhi ng maling paghawak ng mga puwang sa pagitan ng HTTP header name at colon, pati na rin ang iba't ibang paghawak ng carriage return at mga line feed na character sa parameter block na ginamit kapag pumasa. ang request body sa chunks sa "chunked" mode. ".

Alalahanin na ang platform ng Node.js ay maaaring gamitin kapwa para sa pagpapanatili ng server ng mga Web application at para sa paglikha ng mga ordinaryong programa ng network ng kliyente at server. Upang mapalawak ang pag-andar ng mga application para sa Node.js, isang malaking koleksyon ng mga module ang inihanda, kung saan makakahanap ka ng mga module na may pagpapatupad ng HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 server at mga kliyente, mga module para sa pagsasama na may iba't ibang web frameworks, WebSocket at Ajax handler , DBMS connectors (MySQL, PostgreSQL, SQLite, MongoDB), templating engine, CSS engine, pagpapatupad ng crypto algorithm at authorization system (OAuth), XML parsers.

Upang matiyak ang pagpoproseso ng malaking bilang ng mga parallel na kahilingan, ang Node.js ay gumagamit ng isang asynchronous na code execution model batay sa hindi naka-block na pangangasiwa ng kaganapan at ang kahulugan ng mga callback handler. Ang mga sinusuportahang paraan para sa multiplexing na koneksyon ay epoll, kqueue, /dev/poll, at piliin. Para sa multiplexing ng koneksyon, ginagamit ang libuv library, na isang add-on para sa libev sa mga Unix system at IOCP sa Windows. Ginagamit ang libeio library para gumawa ng thread pool, at isinama ang c-ares para magsagawa ng mga DNS query sa non-blocking mode. Ang lahat ng system call na nagdudulot ng pagharang ay isinasagawa sa loob ng thread pool at pagkatapos, tulad ng mga tagapangasiwa ng signal, ilipat ang resulta ng kanilang trabaho pabalik sa pamamagitan ng isang hindi pinangalanang pipe (pipe). Ang execution ng JavaScript code ay ibinibigay sa pamamagitan ng paggamit ng V8 engine na binuo ng Google (bilang karagdagan, ang Microsoft ay bumubuo ng isang bersyon ng Node.js gamit ang Chakra-Core engine).

Sa kaibuturan nito, ang Node.js ay katulad ng Perl AnyEvent, Ruby Event Machine, Python Twisted frameworks, at pagpapatupad ng Tcl event, ngunit ang event loop sa Node.js ay nakatago mula sa developer at kahawig ng event handling sa isang web application na tumatakbo. sa browser. Kapag nagsusulat ng mga application para sa node.js, kailangan mong isaalang-alang ang mga detalye ng programming na hinimok ng kaganapan, halimbawa, sa halip na gawin ang "var result = db.query("select..");" sa paghihintay para sa pagkumpleto ng trabaho at kasunod na pagproseso ng mga resulta, ginagamit ng Node.js ang prinsipyo ng asynchronous execution, i.e. ang code ay binago sa "db.query("select..", function (result) {result processing});", kung saan ang kontrol ay agad na mapapasa sa karagdagang code, at ang resulta ng query ay ipoproseso pagdating ng data.

Pinagmulan: opennet.ru

Magdagdag ng komento