La versió 17.0 de JavaScript del costat del servidor Node.js

Es va llançar Node.js 17.0, una plataforma per executar aplicacions de xarxa en JavaScript. Node.js 17.0 és una branca de suport habitual que continuarà rebent actualitzacions fins al juny de 2022. En els propers dies es completarà l'estabilització de la branca Node.js 16, que rebrà l'estat de LTS i tindrà suport fins a l'abril de 2024. El manteniment de la branca LTS anterior de Node.js 14.0 durarà fins a l'abril de 2023 i l'any anterior a l'última branca LTS 12.0 fins a l'abril de 2022.

Principals millores:

  • El motor V8 s'ha actualitzat a la versió 9.5.
  • S'ha continuat la implementació de variants de l'API bàsica basades en l'ús de la interfície informàtica asíncrona de Promise. A més de les API Timers Promises i Streams Promises que s'ofereixen anteriorment, Node.js 17.0 introdueix l'API Readline Promise per llegir dades línia per línia mitjançant el mòdul readline. importar * com a línia de lectura des de 'node:readline/promises'; import { stdin com a entrada, stdout com a sortida } des del 'procés'; const rl = readline.createInterface ({ entrada, sortida }); const answer = await rl.question('Què en penseu de Node.js?'); console.log('Gràcies pels teus valuosos comentaris: ${answer}'); rl.close();
  • La biblioteca OpenSSL subministrada s'ha actualitzat a la versió 3.0 (s'utilitza una forquilla quictls/openssl amb el suport del protocol QUIC activat).
  • S'ha habilitat la versió de Node.js per mostrar-se a les traces de la pila que es produeixen en cas d'errors fatals que fan que l'aplicació finalitzi.

A més, podem esmentar l'eliminació de dues vulnerabilitats a les branques actuals de Node.js (CVE-2021-22959, CVE-2021-22960), que permeten dur a terme atacs de "contrabans de sol·licituds HTTP" (HRS), que ens permeten endinsar-nos en el contingut de les sol·licituds d'altres usuaris processades en el mateix fil entre el front-end i el backend (per exemple, el codi JavaScript maliciós es pot inserir a la sessió d'un altre usuari). Els detalls es revelaran més endavant, però de moment només sabem que els problemes són causats per un maneig incorrecte dels espais entre el nom de la capçalera HTTP i els dos punts, així com per un maneig diferent dels caràcters de retorn de carro i avançament de línia en el bloc de paràmetres utilitzat quan es transmet el cos de la sol·licitud en parts en el mode "en trossos""

Recordem que la plataforma Node.js es pot utilitzar tant per al suport del servidor d'aplicacions web com per crear programes habituals de xarxa de servidor i client. Per ampliar la funcionalitat de les aplicacions per a Node.js, s'ha preparat una gran col·lecció de mòduls, en els quals es poden trobar mòduls amb la implementació de servidors i clients HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, mòduls per a la integració. amb diversos frameworks web, gestors WebSocket i Ajax, connectors a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motors de plantilles, motors CSS, implementacions d'algoritmes criptogràfics i sistemes d'autorització (OAuth), analitzadors XML.

Per garantir el processament d'un gran nombre de sol·licituds paral·leles, Node.js utilitza un model d'execució de codi asíncron basat en la gestió d'esdeveniments sense bloqueig i la definició de gestors de devolució de trucada. Els mètodes admesos per a la multiplexació de connexions són epoll, kqueue, /dev/poll i select. Per a la multiplexació de connexions, s'utilitza la biblioteca libuv, que és un complement per a libev en sistemes Unix i IOCP a Windows. La biblioteca libeio s'utilitza per crear un grup de fils, c-ares s'integra per realitzar consultes DNS en mode sense bloqueig. Totes les trucades al sistema que causen bloqueig s'executen dins del grup de fils i després, com els controladors de senyals, transfereixen el resultat del seu treball de nou a través d'una canonada sense nom (pipe). L'execució del codi JavaScript es proporciona mitjançant l'ús del motor V8 desenvolupat per Google (a més, Microsoft està desenvolupant una versió de Node.js amb el motor Chakra-Core).

En el seu nucli, Node.js és similar als marcs Perl AnyEvent, Ruby Event Machine, Python Twisted i la implementació d'esdeveniments Tcl, però el bucle d'esdeveniments a Node.js està ocult per al desenvolupador i s'assembla a la gestió d'esdeveniments en una aplicació web que s'executa. al navegador. Quan escriviu aplicacions per a node.js, heu de tenir en compte les especificitats de la programació basada en esdeveniments, per exemple, en lloc de fer "var resultat = db.query("select..");" amb l'espera de la finalització del treball i el processament posterior dels resultats, Node.js utilitza el principi d'execució asíncrona, és a dir. el codi es transforma en "db.query("seleccionar..", funció (resultat) {processament de resultats});", en el qual el control passarà instantàniament a més codi i el resultat de la consulta es processarà a mesura que arribin les dades.

Font: opennet.ru

Afegeix comentari