测试我的 h2c 实现的简单工具
Simple tool to test my h2c implementation
作为学习的一部分,我决定编写一个 HTTP/2 能够简单地提供静态文件服务的服务器。我必须用 C 语言编写它,我对它的经验很少,所以我决定使用 h2c
(使用 TCP),而不是 h2
(使用 TLS)。我需要一些工具来测试我的服务器,但我既不能使用 Chrome,也不能使用 Firefox,因为它们都只支持 h2
.
测试我的服务器最简单的方法是什么?也许有一些 h2c
其他语言的实现,比如 python 或 js(节点),我可以在那里快速 assemble 一个测试客户端?
我还在考虑实现h2
,如果没有,但是看了this OpenSSL TLS client example,我有点害怕,因为它只是一个简单的GET
,它的大小是到目前为止我编写的代码的 4 倍。
由于您使用 C 语言工作,因此您可以使用 nghttp2
来测试您的 h2c
实现。
我刚刚针对 Jetty HTTP/2 服务器进行了测试,这是输出:
$ nghttp -v http://localhost:8080
[ 0.000] send SETTINGS frame <length=12, flags=0x00, stream_id=0>
(niv=2)
[SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
[SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
[ 0.000] send HEADERS frame <length=33, flags=0x05, stream_id=1>
; END_STREAM | END_HEADERS
(padlen=0)
; Open new stream
:authority: localhost:8080
:method: GET
:path: /
:scheme: http
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/0.6.7
[ 0.104] recv SETTINGS frame <length=12, flags=0x00, stream_id=0>
(niv=2)
[SETTINGS_HEADER_TABLE_SIZE(0x01):4096]
[SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
[ 0.104] send SETTINGS frame <length=0, flags=0x01, stream_id=0>
; ACK
(niv=0)
[ 0.105] recv SETTINGS frame <length=0, flags=0x01, stream_id=0>
; ACK
(niv=0)
[ 0.121] recv (stream_id=1, noind=0) :status: 200
[ 0.121] recv (stream_id=1, noind=0) server: Jetty(9.3.z-SNAPSHOT)
[ 0.121] recv (stream_id=1, noind=0) date: Wed, 17 Feb 2016 19:11:17 GMT
[ 0.121] recv (stream_id=1, noind=0) custom: Value
[ 0.121] recv (stream_id=1, noind=0) content-type: text/plain
[ 0.121] recv (stream_id=1, noind=0) content-length: 72
[ 0.121] recv HEADERS frame <length=70, flags=0x04, stream_id=1>
; END_HEADERS
(padlen=0)
; First response header
Hello from Jetty using HTTP/2.0
uri=/
date=Wed Feb 17 20:11:17 CET 2016
[ 0.121] recv DATA frame <length=72, flags=0x01, stream_id=1>
; END_STREAM
[ 0.121] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
(last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[])
作为学习的一部分,我决定编写一个 HTTP/2 能够简单地提供静态文件服务的服务器。我必须用 C 语言编写它,我对它的经验很少,所以我决定使用 h2c
(使用 TCP),而不是 h2
(使用 TLS)。我需要一些工具来测试我的服务器,但我既不能使用 Chrome,也不能使用 Firefox,因为它们都只支持 h2
.
测试我的服务器最简单的方法是什么?也许有一些 h2c
其他语言的实现,比如 python 或 js(节点),我可以在那里快速 assemble 一个测试客户端?
我还在考虑实现h2
,如果没有,但是看了this OpenSSL TLS client example,我有点害怕,因为它只是一个简单的GET
,它的大小是到目前为止我编写的代码的 4 倍。
由于您使用 C 语言工作,因此您可以使用 nghttp2
来测试您的 h2c
实现。
我刚刚针对 Jetty HTTP/2 服务器进行了测试,这是输出:
$ nghttp -v http://localhost:8080
[ 0.000] send SETTINGS frame <length=12, flags=0x00, stream_id=0>
(niv=2)
[SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
[SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
[ 0.000] send HEADERS frame <length=33, flags=0x05, stream_id=1>
; END_STREAM | END_HEADERS
(padlen=0)
; Open new stream
:authority: localhost:8080
:method: GET
:path: /
:scheme: http
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/0.6.7
[ 0.104] recv SETTINGS frame <length=12, flags=0x00, stream_id=0>
(niv=2)
[SETTINGS_HEADER_TABLE_SIZE(0x01):4096]
[SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
[ 0.104] send SETTINGS frame <length=0, flags=0x01, stream_id=0>
; ACK
(niv=0)
[ 0.105] recv SETTINGS frame <length=0, flags=0x01, stream_id=0>
; ACK
(niv=0)
[ 0.121] recv (stream_id=1, noind=0) :status: 200
[ 0.121] recv (stream_id=1, noind=0) server: Jetty(9.3.z-SNAPSHOT)
[ 0.121] recv (stream_id=1, noind=0) date: Wed, 17 Feb 2016 19:11:17 GMT
[ 0.121] recv (stream_id=1, noind=0) custom: Value
[ 0.121] recv (stream_id=1, noind=0) content-type: text/plain
[ 0.121] recv (stream_id=1, noind=0) content-length: 72
[ 0.121] recv HEADERS frame <length=70, flags=0x04, stream_id=1>
; END_HEADERS
(padlen=0)
; First response header
Hello from Jetty using HTTP/2.0
uri=/
date=Wed Feb 17 20:11:17 CET 2016
[ 0.121] recv DATA frame <length=72, flags=0x01, stream_id=1>
; END_STREAM
[ 0.121] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
(last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[])