Lanzamiento de la plataforma de JavaScript del servidor Node.js 17.0

Se realizó el lanzamiento de Node.js 17.0, una plataforma para ejecutar aplicaciones de red en JavaScript. Node.js 17.0 pertenece a la rama con soporte regular, cuyas actualizaciones se lanzarán hasta junio de 2022. En los próximos días se completará la estabilización de la rama Node.js 16, que recibirá el estatus de LTS y será compatible hasta abril de 2024. El soporte de la anterior versión LTS Node.js 14.0 continuará hasta abril de 2023, mientras que la versión LTS anterior 12.0 se mantendrá hasta abril de 2022.

Principales mejoras:

  • El motor V8 se ha actualizado a la versión 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();
  • La biblioteca OpenSSL incluida se ha actualizado a la versión 3.0 (se utilizó un fork quictls/openssl con soporte habilitado para el protocolo QUIC).
  • Se ha asegurado la salida de la versión de Node.js en las trazas de pila, que se generan en caso de errores fatales que provocan la finalización de la aplicación.

Además, se puede mencionar la corrección de dos vulnerabilidades en las versiones actuales de Node.js (CVE-2021-22959, CVE-2021-22960), que permiten realizar ataques del tipo 'HTTP Request Smuggling' (HRS), permitiendo a través de la envío de solicitudes de clientes específicamente diseñadas inmiscuirse en el contenido de solicitudes de otros usuarios, que son procesadas en el mismo hilo entre el frontend y el backend (por ejemplo, se puede lograr la inyección de código JavaScript malicioso en la sesión de otro usuario). Los detalles se revelarán más adelante, y por ahora solo se sabe que los problemas fueron causados por una incorrecta gestión de los espacios entre el nombre de la cabecera HTTP y los dos puntos, así como un tratamiento diferente de los caracteres de retorno de carro y nueva línea en el bloque de parámetros utilizado al enviar el cuerpo de la solicitud en partes en modo 'chunked'.

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

Para garantizar el procesamiento de un gran número de solicitudes paralelas, Node.js utiliza un modelo asíncrono para la ejecución de código, basado en el manejo de eventos en modo no bloqueante y la definición de manejadores de callback. Se soportan métodos de multiplexión de conexiones como epoll, kqueue, \/dev\/poll y select. Para la multiplexión de conexiones se utiliza la biblioteca libuv, que es una capa superior a libev en sistemas Unix y a IOCP en Windows. Para crear un grupo de hilos se utiliza la biblioteca libeio, y para realizar consultas DNS en modo no bloqueante se integra c-ares. Todas las llamadas al sistema que causan bloqueo se llevan a cabo dentro del grupo de hilos y luego, al igual que los manejadores de señales, envían el resultado de su trabajo de vuelta a través de un canal anónimo (pipe). La ejecución de código JavaScript se garantiza mediante el uso del motor V8 desarrollado por Google (además, Microsoft desarrolla una variante de Node.js con el motor Chakra-Core).

En esencia, Node.js es similar a los frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted y la implementación de eventos en Tcl, pero el ciclo de manejo de eventos (event loop) en Node.js está oculto al desarrollador y se asemeja al manejo de eventos en una aplicación web ejecutándose en un navegador. Al escribir aplicaciones para Node.js, es necesario tener en cuenta la especificidad de la programación orientada a eventos, por ejemplo, en lugar de ejecutar "var result = db.query('select..');" esperando a que termine y luego procesar 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) {procesar resultado});", donde el control se transfiere de inmediato al código siguiente, y el resultado de la consulta se procesará a medida que lleguen los datos.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster