6

私は、HTTP/2 のプッシュ機能を使用して、発行される GET 要求の数を減らし、特定のクライアント サーバー実装で認識される平均遅延を減らす方法を検討してきました。既存のクライアントは、curl を使用して GET リクエストを発行することに大きく依存しており、現在の実装を再利用できる必要があります。最近のバージョンの curl は、基になる nghttp2 モジュールに依存して、HTTP/2 のサポートを提供します。既存の nghttp2 サーバーを使用:

nghttpd -d /var/www/html/ 3000 local.key local.crt

nghttp と curl の両方を使用して、サンプル テキスト ファイルのコンテンツを取得できます。

nghttp https://localhost:3000/text.txt
This is some sample text.

curl https://localhost:3000/text.txt -k --http2
This is some sample text.

ただし、nghttp2 のプッシュ機能を使用すると、別のテキスト ファイルがプッシュされます。

nghttpd -d /var/www/html/ -p/text.txt=/text2.txt 3000 local.key local.crt

curl はプッシュされたリソースを処理できないようです:

nghttp https://localhost:3000/bbb/text.txt
This is some sample text.
This is some sample text as well.

curl https://localhost:3000/text.txt -k --http2 -v
...
* nghttp2_session_mem_recv() returns 268
* before_frame_send() was called
* on_frame_send() was called
* on_stream_close() was called, error_code = 1
* before_frame_send() was called
* on_frame_send() was called
* on_stream_close() was called, error_code = 1
* Connection #0 to host localhost left intact

実際、サーバー側では、開いている 2 つのストリームに対して 2 つのリセットが受信されます。

[id=1] [331.593] recv RST_STREAM frame <length=4, flags=0x00, stream_id=1>
      (error_code=PROTOCOL_ERROR(0x01))
[id=1] [331.594] recv RST_STREAM frame <length=4, flags=0x00, stream_id=2>
      (error_code=PROTOCOL_ERROR(0x01))
[id=1] [331.594] closed

HTTP/2 プッシュ機能で curl を使用する方法はありますか?

4

1 に答える 1

5

curl (コマンド ライン ツール) は HTTP/2 プッシュを (まだ) サポートしていません。

コマンド ライン ツールではなく、libcurl を使用して HTTP/2 を実行する場合にのみ使用できます。

于 2014-12-15T09:31:03.743 に答える