服務器端 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 月,之前的 XNUMX LTS 分支維護到 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 = await 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 代碼的執行是通過使用 Google 開發的 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

添加評論