Utgivelse av JavaScript-plattformen på serversiden Node.js 17.0

Node.js 17.0, en plattform for å kjøre nettverksapplikasjoner i JavaScript, ble utgitt. Node.js 17.0 er en vanlig støttegren som vil fortsette å motta oppdateringer frem til juni 2022. I de kommende dagene vil stabiliseringen av Node.js 16-grenen fullføres, som vil få LTS-status og støttes frem til april 2024. Vedlikehold av den forrige LTS-grenen til Node.js 14.0 vil vare til april 2023, og året før siste LTS-gren 12.0 til april 2022.

Hovedforbedringer:

  • V8-motoren er oppdatert til versjon 9.5.
  • Implementeringen av varianter av grunnleggende API basert på bruk av Promise asynkron databehandlingsgrensesnitt har fortsatt. I tillegg til de tidligere tilbudte Timers Promises og Streams Promises APIene, introduserer Node.js 17.0 Readline Promise API for lesing av data linje for linje ved hjelp av readline-modulen. import * som readline fra 'node:readline/promises'; import { stdin som input, stdout som output } fra 'prosess'; const rl = readline.createInterface({ input, output }); const answer = await rl.question('Hva synes du om Node.js?'); console.log('Takk for din verdifulle tilbakemelding: ${answer}'); rl.close();
  • Det medfølgende OpenSSL-biblioteket har blitt oppdatert til versjon 3.0 (en quictls/openssl-gaffel med QUIC-protokollstøtte aktivert brukes).
  • Aktivert at Node.js-versjonen vises i stackspor som sendes ut i tilfelle fatale feil som fører til at applikasjonen avsluttes.

I tillegg kan vi nevne eliminering av to sårbarheter i de nåværende grenene til Node.js (CVE-2021-22959, CVE-2021-22960), som gjør det mulig å utføre "HTTP Request Smuggling" (HRS)-angrep, som tillate oss å kile inn i innholdet i andre brukeres forespørsler behandlet i samme tråd mellom frontend og backend (for eksempel kan skadelig JavaScript-kode settes inn i en annen brukers økt). Detaljer vil bli avslørt senere, men foreløpig vet vi bare at problemene er forårsaket av feil håndtering av mellomrom mellom HTTP-headernavnet og kolon, samt ulik håndtering av vognretur og linjeskifttegn i parameterblokken som brukes ved overføring forespørselsteksten i deler i "chunked"-modus "

La oss huske at Node.js-plattformen kan brukes både for serverstøtte for webapplikasjoner og for å lage vanlige klient- og servernettverksprogrammer. For å utvide funksjonaliteten til applikasjoner for Node.js er det utarbeidet en stor samling av moduler, der du kan finne moduler med implementering av HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3-servere og klienter, moduler for integrasjon med ulike web-rammeverk, WebSocket- og Ajax-behandlere , koblinger til DBMS (MySQL, PostgreSQL, SQLite, MongoDB), malmotorer, CSS-motorer, implementeringer av kryptografiske algoritmer og autorisasjonssystemer (OAuth), XML-parsere.

For å håndtere et stort antall parallelle forespørsler, bruker Node.js en asynkron kodeutførelsesmodell basert på ikke-blokkerende hendelsesbehandling og definering av tilbakeringingsbehandlere. Støttede metoder for multipleksing av tilkoblinger inkluderer epoll, kqueue, /dev/poll og select. For å multiplekse tilkoblinger brukes libuv-biblioteket, som er et tillegg til libev på Unix-systemer og til IOCP på Windows. Libeio-biblioteket brukes til å lage en trådpool, og c-ares er integrert for å utføre DNS-spørringer i en ikke-blokkerende modus. Alle systemanrop som forårsaker blokkering utføres i trådbasen og sender deretter, i likhet med signalbehandlere, resultatet av arbeidet tilbake gjennom et ikke navngitt rør. Utførelse av JavaScript-kode sikres gjennom bruk av V8-motoren utviklet av Google (i tillegg utvikler Microsoft en versjon av Node.js med Chakra-Core-motoren).

I kjernen ligner Node.js på Perl AnyEvent, Ruby Event Machine, Python Twisted-rammeverket og implementeringen av hendelser i Tcl, men hendelsesløkken i Node.js er skjult for utvikleren og ligner hendelsesbehandling i en nettapplikasjon kjører i nettleseren. Når du skriver applikasjoner for node.js, er det nødvendig å ta hensyn til detaljene ved hendelsesdrevet programmering, for eksempel, i stedet for å gjøre "var result = db.query("select..");" med å vente på ferdigstillelse av arbeidet og påfølgende behandling av resultatene, bruker Node.js prinsippet om asynkron utførelse, dvs. koden transformeres til "db.query("velg..", funksjon (resultat) {resultatbehandling});", der kontrollen umiddelbart vil gå over til videre kode, og søkeresultatet vil bli behandlet etter hvert som data kommer.

Kilde: opennet.ru

Legg til en kommentar