Lanzamiento de Node.js 17.0 de JavaScript del lado del servidor

Se lanzó Node.js 17.0, una plataforma para ejecutar aplicaciones de red en JavaScript. Node.js 17.0 es una rama de soporte regular que seguirá recibiendo actualizaciones hasta junio de 2022. En los próximos días se completará la estabilización de la rama Node.js 16, que recibirá el estado LTS y será compatible hasta abril de 2024. El mantenimiento de la rama LTS anterior de Node.js 14.0 durará hasta abril de 2023, y el año anterior a la última rama LTS 12.0 hasta abril de 2022.

Principales mejoras:

  • El motor V8 se ha actualizado a la versión 9.5.
  • Continuó la implementación de variantes de la API básica basadas en el uso de la interfaz de computación asíncrona Promise. Además de las API Timers Promises y Streams Promises ofrecidas anteriormente, Node.js 17.0 presenta la API Readline Promise para leer datos línea por línea utilizando el módulo readline. importar * como línea de lectura desde 'nodo:línea de lectura/promesas'; importar {stdin como entrada, stdout como salida} del 'proceso'; const rl = readline.createInterface({entrada, salida}); respuesta const = await rl.question('¿Qué opinas de Node.js?'); console.log('Gracias por tus valiosos comentarios: ${answer}'); rl.cerrar();
  • La biblioteca OpenSSL suministrada se actualizó a la versión 3.0 (se utiliza una bifurcación quictls/openssl con soporte de protocolo QUIC habilitado).
  • Habilitó que la versión de Node.js se muestre en los seguimientos de la pila que se generan en caso de errores fatales que provoquen la finalización de la aplicación.

Adicionalmente podemos mencionar la eliminación de dos vulnerabilidades en las ramas actuales de Node.js (CVE-2021-22959, CVE-2021-22960), que permiten realizar ataques “HTTP Request Smuggling” (HRS), que nos permiten introducirnos en el contenido de las solicitudes de otros usuarios procesadas en el mismo hilo entre el frontend y el backend (por ejemplo, se puede insertar código JavaScript malicioso en la sesión de otro usuario). Los detalles se revelarán más adelante, pero por ahora solo sabemos que los problemas son causados ​​por el manejo incorrecto de los espacios entre el nombre del encabezado HTTP y los dos puntos, así como por el manejo diferente de los caracteres de retorno de carro y avance de línea en el bloque de parámetros utilizado al transmitir. el cuerpo de la solicitud en partes en el modo "fragmentado" "

Recordemos que la plataforma Node.js se puede utilizar tanto para el soporte de aplicaciones web del lado del servidor como para crear programas de red de cliente y servidor comunes. Para ampliar la funcionalidad de las aplicaciones para Node.js, se ha preparado una gran colección de módulos, en los que puede encontrar módulos con la implementación de servidores y clientes HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos de integración. con varios frameworks web, manejadores WebSocket y Ajax, conectores a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motores de plantillas, motores CSS, implementaciones de algoritmos criptográficos y sistemas de autorización (OAuth), analizadores XML.

Para garantizar el procesamiento de una gran cantidad de solicitudes paralelas, Node.js utiliza un modelo de ejecución de código asíncrono basado en el manejo de eventos sin bloqueo y la definición de controladores de devolución de llamada. Los métodos admitidos para multiplexar conexiones son epoll, kqueue, /dev/poll y select. Para la multiplexación de conexiones, se utiliza la biblioteca libuv, que es un complemento para libev en sistemas Unix e IOCP en Windows. La biblioteca libeio se utiliza para crear un grupo de subprocesos y c-ares está integrado para realizar consultas de DNS en modo sin bloqueo. Todas las llamadas al sistema que causan el bloqueo se ejecutan dentro del conjunto de subprocesos y luego, como controladores de señales, transfieren el resultado de su trabajo a través de una tubería sin nombre (tubería). La ejecución de código JavaScript se proporciona mediante el uso del motor V8 desarrollado por Google (además, Microsoft está desarrollando una versión de Node.js con el motor Chakra-Core).

En esencia, Node.js es similar a los marcos Perl AnyEvent, Ruby Event Machine, Python Twisted y la implementación de eventos Tcl, pero el bucle de eventos en Node.js está oculto para el desarrollador y se asemeja al manejo de eventos en una aplicación web que se ejecuta en el navegador. Al escribir aplicaciones para node.js, debe tener en cuenta las especificaciones de la programación basada en eventos, por ejemplo, en lugar de hacer "var result = db.query("select..");" con la espera de la finalización del trabajo y el posterior procesamiento de los resultados, Node.js utiliza el principio de ejecución asíncrona, es decir, el código se transforma en "db.query("select..", function (result) {procesamiento de resultados});", en el que el control pasará instantáneamente a más código, y el resultado de la consulta se procesará a medida que lleguen los datos.

Fuente: opennet.ru

Añadir un comentario