Server-side JavaScript Node.js 17.0 release

Utgivningen av Node.js 17.0, en plattform för att köra nätverksapplikationer i JavaScript, har ägt rum. Node.js 17.0 är en vanlig supportgren med uppdateringar fram till juni 2022. Under de kommande dagarna kommer stabiliseringen av Node.js 16-grenen att slutföras, som kommer att få LTS-status och kommer att stödjas fram till april 2024. Underhållet av den tidigare Node.js 14.0 LTS-grenen kommer att pågå till april 2023, och den tidigare 12.0 LTS-grenen till april 2022.

Huvudsakliga förbättringar:

  • V8-motorn har uppdaterats till version 9.5.
  • Implementeringen av varianter av bas-API:et baserat på användningen av Promises asynkrona datorgränssnitt har fortsatt. Utöver de tidigare föreslagna Timers Promises och Streams Promises API:erna, introducerar Node.js 17.0 Readline Promise API för att läsa data rad för rad med hjälp av readline-modulen. importera * som readline från 'node:readline/promises'; importera { stdin som indata, stdout som output } från 'process'; const rl = readline.createInterface({ input, output }); const answer = await rl.question('Vad tycker du om Node.js?'); console.log('Tack för din värdefulla feedback: ${answer}'); rl.close();
  • Det medföljande OpenSSL-biblioteket har uppdaterats till version 3.0 (med quictls/openssl-gaffeln med QUIC-protokollstöd aktiverat).
  • Se till att Node.js-versionen visas i stackspårning för allvarliga fel som gör att programmet avslutas.

Dessutom kan vi nämna elimineringen av två sårbarheter i de nuvarande grenarna av Node.js (CVE-2021-22959, CVE-2021-22960), som gör det möjligt att utföra attacker av klassen HTTP Request Smuggling (HRS), som tillåta, genom att skicka specialdesignade klientförfrågningar, att kila in i innehållet i förfrågningar från andra användare som behandlas i samma tråd mellan frontend och backend (du kan till exempel uppnå ersättning av skadlig JavaScript-kod i en annan användares session). Detaljer kommer att avslöjas senare, men än så länge är det bara känt att problemen orsakas av felaktig hantering av mellanslag mellan HTTP-huvudnamn och kolon, samt olika hantering av vagnretur och radmatningstecken i parameterblocket som används vid passering begärandekroppen i bitar i "chunked"-läge. ".

Kom ihåg att Node.js-plattformen kan användas både för serverunderhåll av webbapplikationer och för att skapa vanliga klient- och servernätverksprogram. För att utöka funktionaliteten av applikationer för Node.js har en stor samling av moduler utarbetats, där du kan hitta moduler med implementering av HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-servrar och klienter, moduler för integration med olika webbramverk, WebSocket- och Ajax-hanterare, DBMS-anslutningar (MySQL, PostgreSQL, SQLite, MongoDB), mallmotorer, CSS-motorer, implementeringar av kryptoalgoritmer och auktoriseringssystem (OAuth), XML-parsers.

För att säkerställa bearbetningen av ett stort antal parallella förfrågningar använder Node.js en asynkron kodexekveringsmodell baserad på icke-blockerande händelsehantering och definitionen av callback-hanterare. Metoder som stöds för multiplexering av anslutningar är epoll, kqueue, /dev/poll och select. För anslutningsmultiplexering används libuv-biblioteket, som är ett tillägg för libev på Unix-system och IOCP på Windows. Libeio-biblioteket används för att skapa en trådpool, och c-ares är integrerad för att utföra DNS-frågor i icke-blockerande läge. Alla systemanrop som orsakar blockering exekveras inne i trådpoolen och överför sedan, liksom signalhanterare, resultatet av sitt arbete tillbaka genom ett namnlöst rör (pipe). Exekveringen av JavaScript-kod tillhandahålls genom användningen av V8-motorn som utvecklats av Google (dessutom utvecklar Microsoft en version av Node.js med Chakra-Core-motorn).

I sin kärna liknar Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted och implementeringen av Tcl-händelser, men händelseslingan i Node.js är dold för utvecklaren och liknar händelsehantering i en webbapplikation som körs i webbläsaren. När du skriver applikationer för node.js måste du ta hänsyn till detaljerna för händelsestyrd programmering, till exempel istället för att göra "var result = db.query("select..");" med väntan på slutförande av arbete och efterföljande bearbetning av resultat, använder Node.js principen om asynkron exekvering, d.v.s. koden omvandlas till "db.query("select..", funktion (resultat) {resultatbearbetning});", där kontrollen omedelbart kommer att övergå till ytterligare kod, och frågeresultatet kommer att bearbetas när data anländer.

Källa: opennet.ru

Lägg en kommentar