cURL で HTTP/2 の動作確認を行いたいと思ったのですが、 macOS Sierra 標準の cURL では対応していなかった…。[1]

調べてみると Nghttp2 という HTTP/2 のライブラリがあって、これ込みで cURL を再コンパイルすれば HTTP/2 に対応できるようでした。 Nghttp2 はサードパーティのライブラリですが、 HTTP/2 の実装は HTTP/1.1 の実装に比べて複雑であるのと、 Nghttp2 が十分実用的なので採用しているとのこと。

The reason for this is that HTTP/2 is much more complex at that layer than HTTP/1.1 (which we implement on our own) and that nghttp2 is an already existing and well functional library.

HTTP/2 with curl

Homebrew で以下のコマンドを実行します。

brew reinstall curl --with-nghttp2

実行後、既存の curl コマンドと競合しないためにシンボリックリンクを張る案内が表示されるので従います。以上で HTTP/2 対応完了です。

$ curl -I
HTTP/2 200
server: h2o/2.2.3
date: Mon, 07 May 2018 04:22:10 GMT
x-powered-by: Express
cache-control: public, max-age=0, max-age=86400
content-type: text/html; charset=utf-8
etag: W/"f7f6-DxnD0IYL77oJlBfQq3b2BgGrnvc"
vary: Accept-Encoding
content-length: 63478


  1. High Sierra だと標準で対応しているみたいです!(コメント参照) ↩︎