32 lines
1.2 KiB
Plaintext
32 lines
1.2 KiB
Plaintext
|
|
HTTP2 with libcurl
|
|
|
|
Spec: http://tools.ietf.org/html/draft-ietf-httpbis-http2-06
|
|
|
|
nghttp2 (https://github.com/tatsuhiro-t/nghttp2)
|
|
|
|
We're depending on this 3rd party library for the actual low level protocol
|
|
handling parts. The reason for this is that HTTP2 is much more complex at
|
|
that layer than HTTP1.1 (which we implement on our own) and that nghttp2 is
|
|
an already existing and well functional library.
|
|
|
|
Over an http:// URL
|
|
|
|
If CURLOPT_HTTP_VERSION is set to CURL_HTTP_VERSION_2, libcurl will include
|
|
an upgrade header in the initial request to the host to allow upgrading to
|
|
http2. Possibly introduce an option that will cause libcurl to fail if not
|
|
possible to upgrade. Possibly introduce an option that makes libcurl use
|
|
http2 at once over http://
|
|
|
|
Over an https:// URL
|
|
|
|
If CURLOPT_HTTP_VERSION is set to CURL_HTTP_VERSION_2, libcurl will use ALPN
|
|
(or NPN) to negotiate which protocol to continue with. Possibly introduce an
|
|
option that will cause libcurl to fail if not possible to use http2.
|
|
|
|
To consider:
|
|
|
|
- How to tell libcurl when using the multi interface that all or some of the
|
|
handles are allowed to re-use the same physical connection. Can we just
|
|
re-use existing pipelining logic?
|