服务器端 JavaScript Node.js 17.0 发布

Node.js 17.0 发布,这是一个用 JavaScript 运行网络应用程序的平台。 Node.js 17.0 是一个常规支持分支,在 2022 年 16 月之前将继续接收更新。 未来几天,Node.js 2024 分支的稳定工作将完成,该分支将获得 LTS 状态并支持到 14.0 年 2023 月。 Node.js 12.0 之前的 LTS 分支的维护将持续到 2022 年 XNUMX 月,前年的 LTS 分支 XNUMX 的维护将持续到 XNUMX 年 XNUMX 月。

主要改进:

  • V8引擎已更新至9.5版本。
  • 基于 Promise 异步计算接口的基本 API 变体的实现仍在继续。 除了之前提供的 Timers Promises 和 Streams Promises API 之外,Node.js 17.0 还引入了 Readline Promise API,用于使用 readline 模块逐行读取数据。 import * as readline from 'node:readline/promises'; import { stdin 作为输入,stdout 作为输出 } from 'process'; const rl = readline.createInterface({ 输入, 输出 }); const answer = wait rl.question('你觉得 Node.js 怎么样?'); console.log('感谢您的宝贵反馈:${answer}'); rl.close();
  • 提供的 OpenSSL 库已更新到版本 3.0(使用启用了 QUIC 协议支持的 quictls/openssl 分支)。
  • 允许在出现导致应用程序终止的致命错误时输出的堆栈跟踪中显示 Node.js 版本。

此外,我们可以提到当前 Node.js 分支中消除的两个漏洞(CVE-2021-22959、CVE-2021-22960),这使得执行“HTTP 请求走私”(HRS)攻击成为可能,从而允许我们可以插入在前端和后端之间的同一线程中处理的其他用户请求的内容(例如,可以将恶意 JavaScript 代码插入到另一个用户的会话中)。 细节稍后会揭晓,但目前我们只知道问题是由于HTTP头名称和冒号之间的空格处理不正确,以及传输时使用的参数块中的回车符和换行符的不同处理造成的。 “分块”模式下的请求主体部分”

让我们回想一下,Node.js 平台既可用于 Web 应用程序的服务器端支持,也可用于创建普通的客户端和服务器网络程序。 为了扩展 Node.js 应用程序的功能,已经准备了一个大的模块集合,您可以在其中找到实现 HTTP、SMTP、XMPP、DNS、FTP、IMAP、POP3 服务器和客户端的模块、用于集成的模块具有各种 Web 框架、WebSocket 和 Ajax 处理程序、DBMS 连接器(MySQL、PostgreSQL、SQLite、MongoDB)、模板引擎、CSS 引擎、加密算法和授权系统 (OAuth) 的实现、XML 解析器。

为确保处理大量并行请求,Node.js 使用基于非阻塞事件处理和回调处理程序定义的异步代码执行模型。 支持的多路复用连接方法有 epoll、kqueue、/dev/poll 和 select。 对于连接多路复用,使用了 libuv 库,它是 Unix 系统上的 libev 和 Windows 上的 IOCP 的附加组件。 使用libeio库创建线程池,集成c-ares以非阻塞方式进行DNS查询。 所有导致阻塞的系统调用都在线程池内部执行,然后像信号处理程序一样,通过一个未命名的管道(pipe)将它们的工作结果传回。 JavaScript 代码的执行是通过使用由谷歌开发的 V8 引擎提供的(此外,微软正在开发一个带有 Chakra-Core 引擎的 Node.js 版本)。

Node.js 的核心类似于 Perl AnyEvent、Ruby Event Machine、Python Twisted 框架和 Tcl 事件实现,但 Node.js 中的事件循环对开发人员是隐藏的,类似于运行中的 Web 应用程序中的事件处理在浏览器中。 在为 node.js 编写应用程序时,您需要考虑事件驱动编程的细节,例如,而不是执行“var result = db.query("select..");” 等待工作完成和后续处理结果,Node.js采用了异步执行的原理,即代码被转换为“db.query(“select..”, function (result) {result processing});”,其中控制将立即传递给进一步的代码,查询结果将在数据到达时进行处理。

来源: opennet.ru

添加评论