Node v8.8.0がリリースされたが、まだLTSにならない。どうやらv8.x LTSは10/31リリース目標でまだお預けらしい。
気を取り直してv8.8.0のchange logを眺めると、今回のリリースからHTTP/2モジュールがデフォルトで有効になったようだ。実験的実装という位置付けは変わらないようだが、とりあえず試してみよう。
まずサーバの鍵と証明書を作る。無論自己署名のオレオレ証明書。HTTP/2は仕様上、非TLSでの通信も可能であるようだが、各ブラウザベンダは非TLS版を実装しない方針のため事実上TLSが必須らしい。
$ openssl genrsa 2048 > server.key $ openssl req -new -key server.key > server.csr $ openssl x509 -req -signkey server.key < server.csr > server.crt
nodeのコードを書く。ほぼドキュメントのサンプルそのまま。サーバ作成をcreateSecureServerに変えただけ。
const http2 = require('http2'); const fs = require('fs') const server = http2.createSecureServer({ key: fs.readFileSync('./server.key'), cert: fs.readFileSync('./server.crt') }); server.on('stream', (stream, headers) => { stream.respond({ 'content-type': 'text/html', ':status': 200 }); stream.end('<h1>Hello World</h1>'); }); server.listen(8888);
で、ブラウザで https://localhost:8888/ へ。オレオレ証明書なので安全ではないと言われるが、テスト用なので例外追加してアクセス。デベロッパツールで確認
動いた。とても簡単。
サンプルのコードを見るとストリームが双方向になっているようで、サーバからのpushも簡単にできそうな感じ。