サーバーサイド JavaScript Node.js 17.0 リリース

JavaScript でネットワーク アプリケーションを実行するためのプラットフォームである Node.js 17.0 がリリースされました。 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 モジュールを使用してデータを XNUMX 行ずつ読み取るための Readline Promise API が導入されました。 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 の現在のブランチにある 2021 つの脆弱性 (CVE-22959-2021、CVE-22960-XNUMX) が解消されたことにも言及できます。これらの脆弱性により、「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 です。 接続の多重化には、Unix システム上の libev および Windows 上の IOCP のアドオンである libuv ライブラリが使用されます。 libeio ライブラリはスレッド プールの作成に使用され、c-ares はノンブロッキング モードで DNS クエリを実行するために統合されています。 ブロッキングを引き起こすすべてのシステム コールはスレッド プール内で実行され、シグナル ハンドラーと同様に、名前のないパイプ (パイプ) を介して作業の結果を転送します。 JavaScript コードの実行は、Google が開発した V8 エンジンを使用して提供されます (さらに、Microsoft は 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) {結果処理});」に変換され、制御が即座に次のコードに渡され、データが到着するとクエリ結果が処理されます。

出所: オープンネット.ru

コメントを追加します