Frigivelse af server-side JavaScript-platform Node.js 17.0

Node.js 17.0, en platform til at køre netværksapplikationer i JavaScript, blev frigivet. Node.js 17.0 er en almindelig supportgren, der vil fortsætte med at modtage opdateringer indtil juni 2022. I de kommende dage vil stabiliseringen af ​​Node.js 16-grenen blive gennemført, som får LTS-status og vil blive understøttet indtil april 2024. Vedligeholdelse af den tidligere LTS-gren af ​​Node.js 14.0 varer indtil april 2023 og året før sidste LTS-gren 12.0 indtil april 2022.

Vigtigste forbedringer:

  • V8-motoren er blevet opdateret til version 9.5.
  • Implementeringen af ​​varianter af den grundlæggende API baseret på brugen af ​​Promises asynkrone computergrænseflade er fortsat. Ud over de tidligere tilbudte Timers Promises og Streams Promises API'er introducerer Node.js 17.0 Readline Promise API til læsning af data linje for linje ved hjælp af readline modulet. import * som readline fra 'node:readline/promises'; import { stdin som input, stdout som output } fra 'proces'; const rl = readline.createInterface({ input, output }); const answer = await rl.question('Hvad synes du om Node.js?'); console.log('Tak for din værdifulde feedback: ${answer}'); rl.close();
  • Det medfølgende OpenSSL-bibliotek er blevet opdateret til version 3.0 (der bruges en quictls/openssl-gaffel med QUIC-protokolunderstøttelse aktiveret).
  • Aktiverede Node.js-versionen til at blive vist i stakspor, der udlæses i tilfælde af fatale fejl, der får applikationen til at afslutte.

Derudover kan vi nævne elimineringen af ​​to sårbarheder i de nuværende grene af Node.js (CVE-2021-22959, CVE-2021-22960), som gør det muligt at udføre "HTTP Request Smuggling" (HRS) angreb, som tillade os at kile ind i indholdet af andre brugeres anmodninger behandlet i den samme tråd mellem frontend og backend (f.eks. kan ondsindet JavaScript-kode indsættes i en anden brugers session). Detaljer vil blive afsløret senere, men indtil videre ved vi kun, at problemerne er forårsaget af forkert håndtering af mellemrum mellem HTTP-headernavnet og kolon, samt forskellig håndtering af carriage return og line feed-tegn i parameterblokken, der bruges ved transmission anmodningsteksten i dele i "chunked"-tilstand "

Lad os huske på, at Node.js-platformen kan bruges både til serverunderstøttelse af webapplikationer og til at skabe almindelige klient- og servernetværksprogrammer. For at udvide funktionaliteten af ​​applikationer til Node.js er der udarbejdet en stor samling af moduler, hvori du kan finde moduler med implementering af HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 servere og klienter, moduler til integration med forskellige web-frameworks, WebSocket- og Ajax-handlere, connectors til DBMS (MySQL, PostgreSQL, SQLite, MongoDB), skabelonmotorer, CSS-motorer, implementeringer af kryptografiske algoritmer og autorisationssystemer (OAuth), XML-parsere.

For at sikre behandlingen af ​​et stort antal parallelle anmodninger, bruger Node.js en asynkron kodeeksekveringsmodel baseret på ikke-blokerende hændelseshåndtering og definitionen af ​​tilbagekaldsbehandlere. Understøttede metoder til multipleksing af forbindelser er epoll, kqueue, /dev/poll og select. Til forbindelsesmultipleksing bruges libuv-biblioteket, som er en tilføjelse til libev på Unix-systemer og IOCP på Windows. Libeio-biblioteket bruges til at oprette en trådpulje, og c-ares er integreret til at udføre DNS-forespørgsler i ikke-blokerende tilstand. Alle systemkald, der forårsager blokering, udføres inde i trådpuljen og overfører derefter, ligesom signalbehandlere, resultatet af deres arbejde tilbage gennem et unavngivet rør (rør). Udførelsen af ​​JavaScript-kode leveres gennem brugen af ​​V8-motoren udviklet af Google (derudover udvikler Microsoft en version af Node.js med Chakra-Core-motoren).

I sin kerne ligner Node.js Perl AnyEvent, Ruby Event Machine, Python Twisted-frameworks og Tcl-begivenhedsimplementeringen, men hændelsesløkken i Node.js er skjult for udvikleren og ligner hændelseshåndtering i en webapplikation, der kører i browser. Når du skriver applikationer til node.js, skal du tage højde for de særlige forhold ved begivenhedsdrevet programmering, for eksempel i stedet for at gøre "var result = db.query("select..");" med afventning af afslutning af arbejde og efterfølgende behandling af resultater, anvender Node.js princippet om asynkron eksekvering, dvs. koden transformeres til "db.query("vælg..", funktion (resultat) {resultatbehandling});", hvor kontrollen øjeblikkeligt overføres til yderligere kode, og forespørgselsresultatet vil blive behandlet efterhånden som data ankommer.

Kilde: opennet.ru

Tilføj en kommentar