web-dev-qa-db-ja.com

NodeJSネイティブhttp2サポート

NodeJS4.xまたは5.xはHTTP/2プロトコルをネイティブにサポートしていますか? http2パッケージがあることは知っていますが、それは外部のものです。

Http2サポートをノードのコアに統合する計画はありますか?

16
Oskar Szura

--expose-http2フラグは、実験的なHTTP2サポートを有効にします。このフラグは、2017年8月5日以降のナイトリービルド(ノードv8.4.0)で使用できます( プルリクエスト )。

node --expose-http2 client.js

client.js

const http2 = require('http2');
const client = http2.connect('https://stackoverflow.com');

const req = client.request();
req.setEncoding('utf8');

req.on('response', (headers, flags) => {
  console.log(headers);
});

let data = '';
req.on('data', (d) => data += d);
req.on('end', () => client.destroy());
req.end();

Node v8.5.0以降、--experimental-modulesフラグも追加できます。

node --expose-http2 --experimental-modules client.mjs

client.mjs

import http2 from 'http2';

const client = http2.connect('https://stackoverflow.com');

ナイトリービルドのテストにはNVS(ノードバージョンスイッチャー)を使用しています。

nvs add nightly
nvs use nightly
9
masakielastic

いいえ、まだです。

コアNodeJSにHTTP/2サポートを追加する方法についての説明は次のとおりです。 https://github.com/nodejs/NG/issues/8

8
FF_Dev

ノードv8.8.1以降、コードを実行するときに--expose-http2フラグは必要ありません。

HTTP/2を使い始める最も簡単な方法は、Node.jsが公開している互換性APIを利用することです。

const http2 = require('http2');
const fs = require('fs');

const options = {
    key: fs.readFileSync('./selfsigned.key'),
    cert: fs.readFileSync('./selfsigned.crt'),
    allowHTTP1: true
}

const server = http2.createSecureServer(options, (req, res) => {
  res.setHeader('Content-Type', 'text/html');
  res.end('ok');
});

server.listen(443);

ネイティブHTTP/2 Node.jsが公開してサーバーを作成する の使用について詳しく説明しました。

2
everconfusedGuy

ノード8.4.0には実験的なHttp2APIがあります。ここのドキュメント nodejs http2

1
el_bogavante