Utgivning av server-JavaScript-plattformen Node.js 17.0

Node.js 17.0 har släppts, plattformen för körning av nätverksapplikationer skrivna i JavaScript. Node.js 17.0 tillhör en gren med standard stöd, där uppdateringar kommer att släppas fram till juni 2022. Stabilisering av Node.js 16-grenen kommer att avslutas inom de kommande dagarna, vilket kommer att ge den LTS-status och stöd fram till april 2024. Stödet för den tidigare LTS-grenen Node.js 14.0 kommer att pågå till april 2023, och för den föregående LTS-grenen 12.0 fram till april 2022.

Huvudsakliga förbättringar:

  • V8-motorn har uppdaterats till version 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();
  • Den medföljande OpenSSL-biblioteket har uppdaterats till version 3.0 (en fork av quictls/openssl med inkluderat stöd för QUIC-protokollet).
  • Versionen av Node.js visas i stacktracer som genereras vid fatala fel som leder till att applikationen avslutas.

Dessutom kan det nämnas att två sårbarheter (CVE-2021-22959, CVE-2021-22960) har åtgärdats i de aktuella Node.js-grenarna. Dessa sårbarheter möjliggör attacker av typen 'HTTP Request Smuggling' (HRS), vilket gör att man genom att skicka speciellt formaterade klientförfrågningar kan infiltrera innehållet i andra användares förfrågningar som behandlas i samma ström mellan frontend och backend (till exempel kan det leda till att skadlig JavaScript-kod injiceras i en annan användares session). Detaljer kommer att offentliggöras senare, men hittills är det känt att problemen uppstår på grund av felaktig hantering av mellanslag mellan namn på HTTP-huvudet och kolon, samt olika hantering av returtecken och radbrytningar i parameterblocket som används för att överföra kroppsinnehållet i delar i 'chunked' läge.

Vi påminner om att plattformen Node.js kan användas både för serverhantering av webbapplikationer och för att skapa vanliga klient- och servernätverksprogram. För att utöka funktionaliteten hos applikationer för Node.js finns en stor samling moduler, där man kan hitta moduler med implementationer servrar och kunder för HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, moduler för integration med olika webbramverk, WebSocket- och Ajax-hanterare, anslutare till databaser (MySQL, PostgreSQL, SQLite, MongoDB), mallmotorer, CSS-motorer, implementationer av kryptalgoritmer och auktorisationssystem (OAuth), XML-parserare.

För att hantera ett stort antal parallella förfrågningar använder Node.js ett asynkront kodkörningssystem baserat på händelsehantering i icke-blockerande läge och definierar callback-hanterare. Metoder som epoll, kqueue, /dev/poll och select stöds för multiplexeringsanslutningar. För multiplexeringsanslutningar används biblioteket libuv, som är ett lager över libev i Unix-system och över IOCP i Windows. För att skapa en trådpool används biblioteket libeio, och för att utföra DNS-förfrågningar i icke-blockerande läge integreras c-ares. Alla systemanrop som orsakar blockering utförs inom trådpoolen och skickar sedan, liksom signalhanterare, tillbaka resultatet av sitt arbete genom en anonym kanal (pipe). Utförandet av JavaScript-kod säkerställs genom att använda den av Google utvecklade V8-motorn (dessutom utvecklar Microsoft en variant av Node.js med Chakra-Core-motorn).

I grunden liknar Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted och händelsehantering i Tcl, men händelsecykeln (event loop) i Node.js är gömd för utvecklaren och påminner om händelsehantering i en webbapplikation som körs i webbläsaren. Vid utveckling av applikationer för Node.js är det viktigt att ta hänsyn till den händelseorienterade programmeringsspecifikationen. Istället för att köra "var result = db.query('select..');" och vänta på att operationen ska slutföras innan jag behandlar resultaten, används i Node.js principen för asynkron bearbetning. Det vill säga koden omformas till "db.query('select..', function (result) {resultathantering});", där kontrollen omedelbart går vidare till nästa kod medan resultaten kommer att bearbetas efter hand.

Källa: opennet.ru

Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster