Lançamento da plataforma JavaScript do lado do servidor Node.js 17.0

Foi lançado o Node.js 17.0, uma plataforma para execução de aplicativos de rede em JavaScript. Node.js 17.0 é um branch de suporte regular que continuará recebendo atualizações até junho de 2022. Nos próximos dias será concluída a estabilização da filial Node.js 16, que receberá o status LTS e terá suporte até abril de 2024. A manutenção da ramificação LTS anterior do Node.js 14.0 durará até abril de 2023, e do penúltimo ramo LTS 12.0 até abril de 2022.

Principais melhorias:

  • O motor V8 foi atualizado para a versão 9.5.
  • A implementação de variantes da API básica baseada no uso da interface de computação assíncrona Promise continuou. Além das APIs Timers Promises e Streams Promises oferecidas anteriormente, o Node.js 17.0 introduz a API Readline Promise para leitura de dados linha por linha usando o módulo readline. importar * como readline de 'node:readline/promises'; importar {stdin como entrada, stdout como saída} de 'processo'; const rl = readline.createInterface({ entrada, saída }); const resposta = aguardar rl.question('O que você acha do Node.js?'); console.log('Obrigado pelo seu valioso feedback: ${answer}'); rl.close();
  • A biblioteca OpenSSL fornecida foi atualizada para a versão 3.0 (é usado um fork quictls/openssl com suporte ao protocolo QUIC habilitado).
  • Habilitou a exibição da versão do Node.js em rastreamentos de pilha gerados em caso de erros fatais que causam o encerramento do aplicativo.

Adicionalmente, podemos citar a eliminação de duas vulnerabilidades nas atuais ramificações do Node.js (CVE-2021-22959, CVE-2021-22960), que possibilitam a realização de ataques de “HTTP Request Smuggling” (HRS), que nos permitem acessar o conteúdo das solicitações de outros usuários processadas no mesmo thread entre o front-end e o back-end (por exemplo, código JavaScript malicioso pode ser inserido na sessão de outro usuário). Os detalhes serão revelados posteriormente, mas por enquanto sabemos apenas que os problemas são causados ​​pelo tratamento incorreto de espaços entre o nome do cabeçalho HTTP e os dois pontos, bem como pelo tratamento diferente de caracteres de retorno de carro e avanço de linha no bloco de parâmetros usado durante a transmissão. o corpo da solicitação em partes no modo “fragmentado” "

Lembre-se de que a plataforma Node.js pode ser usada tanto para suporte de aplicativos da Web no lado do servidor quanto para a criação de programas comuns de rede de clientes e servidores. Para ampliar a funcionalidade das aplicações para Node.js, foi preparado um grande acervo de módulos, onde você encontra módulos com implementação de servidores e clientes HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para integração com diversos frameworks web, manipuladores WebSocket e Ajax, conectores para SGBD (MySQL, PostgreSQL, SQLite, MongoDB), motores de templates, motores CSS, implementações de algoritmos criptográficos e sistemas de autorização (OAuth), analisadores XML.

Para lidar com um grande número de solicitações paralelas, o Node.js usa um modelo de execução de código assíncrono baseado no processamento de eventos sem bloqueio e na definição de manipuladores de retorno de chamada. Os métodos suportados para conexões de multiplexação incluem epoll, kqueue, /dev/poll e select. Para multiplexação de conexões, é utilizada a biblioteca libuv, que é um complemento da libev em sistemas Unix e do IOCP no Windows. A biblioteca libeio é usada para criar um pool de threads e c-ares é integrado para realizar consultas DNS em modo sem bloqueio. Todas as chamadas do sistema que causam bloqueio são executadas dentro do pool de threads e então, como manipuladores de sinal, passam o resultado de seu trabalho de volta por meio de um canal sem nome. A execução do código JavaScript é garantida através da utilização do motor V8 desenvolvido pelo Google (além disso, a Microsoft está desenvolvendo uma versão do Node.js com o motor Chakra-Core).

Em sua essência, o Node.js é semelhante aos frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted e à implementação de eventos em Tcl, mas o loop de eventos no Node.js está oculto do desenvolvedor e se assemelha ao processamento de eventos em um aplicativo da web rodando no navegador. Ao escrever aplicativos para node.js, é necessário levar em consideração as especificidades da programação orientada a eventos, por exemplo, em vez de fazer “var result = db.query(“select..”);” com a espera pela conclusão do trabalho e posterior processamento dos resultados, o Node.js utiliza o princípio da execução assíncrona, ou seja, o código é transformado em “db.query(“select..”, function (result) {processamento de resultado});”, no qual o controle passará imediatamente para outro código, e o resultado da consulta será processado conforme os dados chegam.

Fonte: opennet.ru

Adicionar um comentário