Versión Node.js 17.0 de JavaScript do servidor

Lanzouse Node.js 17.0, unha plataforma para executar aplicacións de rede en JavaScript. Node.js 17.0 é unha rama de soporte regular que seguirá recibindo actualizacións ata xuño de 2022. Nos próximos días completarase a estabilización da rama Node.js 16, que recibirá o estado LTS e será compatible ata abril de 2024. O mantemento da rama LTS anterior de Node.js 14.0 durará ata abril de 2023 e o ano anterior á última rama LTS 12.0 ata abril de 2022.

Melloras principais:

  • O motor V8 actualizouse á versión 9.5.
  • Continuou a implementación de variantes da API básica baseadas no uso da interface de computación asincrónica de Promise. Ademais das API de Timers Promises e Streams Promises ofrecidas anteriormente, Node.js 17.0 introduce a API Readline Promise para ler datos liña por liña mediante o módulo readline. importar * como readline desde 'node:readline/promises'; import { stdin como entrada, stdout como saída } de 'proceso'; const rl = readline.createInterface({ entrada, saída }); const answer = await rl.question('Que opinas de Node.js?'); console.log('Grazas polos teus valiosos comentarios: ${answer}'); rl.close();
  • A biblioteca OpenSSL proporcionada actualizouse á versión 3.0 (utilízase un fork quictls/openssl co soporte do protocolo QUIC activado).
  • Active a versión de Node.js para mostrarse nos trazos da pila que se saen en caso de erros mortais que provocan a finalización da aplicación.

Ademais, podemos mencionar a eliminación de dúas vulnerabilidades nas ramas actuais de Node.js (CVE-2021-22959, CVE-2021-22960), que permiten levar a cabo ataques “HTTP Request Smuggling” (HRS), que permítenos entrar no contido das solicitudes doutros usuarios procesadas no mesmo fío entre o frontend e o backend (por exemplo, pódese inserir código JavaScript malicioso na sesión doutro usuario). Os detalles revelaranse máis adiante, pero polo de agora só sabemos que os problemas son causados ​​por un manexo incorrecto dos espazos entre o nome da cabeceira HTTP e os dous puntos, así como por un manexo diferente dos caracteres de retorno de carro e salto de liña no bloque de parámetros utilizado ao transmitir o corpo da solicitude en partes no modo "en fragmentos""

Lembremos que a plataforma Node.js pódese usar tanto para o soporte do servidor de aplicacións web como para crear programas de rede de servidor e cliente comúns. Para ampliar a funcionalidade das aplicacións para Node.js, preparouse unha gran colección de módulos, nos que se poden atopar módulos coa implementación de servidores e clientes HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para a integración. con varios frameworks web, manejadores WebSocket e Ajax, conectores a DBMS (MySQL, PostgreSQL, SQLite, MongoDB), motores de modelos, motores CSS, implementacións de algoritmos criptográficos e sistemas de autorización (OAuth), analizadores XML.

Para garantir o procesamento dunha gran cantidade de solicitudes paralelas, Node.js usa un modelo de execución de código asíncrono baseado no manexo de eventos sen bloqueo e na definición de controladores de devolución de chamada. Os métodos compatibles para multiplexar conexións son epoll, kqueue, /dev/poll e select. Para a multiplexación de conexións, úsase a biblioteca libuv, que é un complemento para libev en sistemas Unix e IOCP en Windows. A biblioteca libeio úsase para crear unha agrupación de fíos e c-ares está integrado para realizar consultas DNS en modo sen bloqueo. Todas as chamadas ao sistema que provocan o bloqueo execútanse dentro do grupo de fíos e despois, como os controladores de sinal, transfiren o resultado do seu traballo de volta a través dunha canalización sen nome (tubo). A execución de código JavaScript proporciónase mediante o uso do motor V8 desenvolvido por Google (ademais, Microsoft está a desenvolver unha versión de Node.js co motor Chakra-Core).

No seu núcleo, Node.js é similar aos marcos Perl AnyEvent, Ruby Event Machine, Python Twisted e a implementación de eventos Tcl, pero o bucle de eventos en Node.js está oculto para o desenvolvedor e aseméllase ao manexo de eventos nunha aplicación web en execución. no navegador. Ao escribir aplicacións para node.js, cómpre ter en conta os detalles específicos da programación dirixida por eventos, por exemplo, en lugar de facer "var result = db.query("select..");" coa espera da finalización do traballo e do procesamento posterior dos resultados, Node.js utiliza o principio de execución asíncrona, é dicir. o código transfórmase en "db.query("select..", function (result) {result processing});", no que o control pasará instantáneamente a outro código e o resultado da consulta procesarase a medida que cheguen os datos.

Fonte: opennet.ru

Engadir un comentario