mirror of
https://github.com/moparisthebest/curl
synced 2025-02-28 09:21:50 -05:00
README.http2: refreshed and added TODO items
This commit is contained in:
parent
7b223a3a21
commit
eb2a6180fb
@ -1,8 +1,9 @@
|
||||
|
||||
HTTP2 with libcurl
|
||||
|
||||
Spec: http://tools.ietf.org/html/draft-ietf-httpbis-http2
|
||||
|
||||
Document explaining it: http://daniel.haxx.se/http2/
|
||||
|
||||
Build prerequisites
|
||||
- nghttp2
|
||||
- OpenSSL, NSS, GnutTLS or PolarSSL with a new enough version
|
||||
@ -10,8 +11,8 @@ HTTP2 with libcurl
|
||||
nghttp2 (https://github.com/tatsuhiro-t/nghttp2)
|
||||
|
||||
libcurl uses this 3rd party library for the 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
|
||||
parts. 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.
|
||||
|
||||
Right now, nghttp2 implements http2 draft-14
|
||||
@ -20,9 +21,9 @@ HTTP2 with libcurl
|
||||
|
||||
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.
|
||||
If CURLOPT_HTTP_VERSION is set to CURL_HTTP_VERSION_2_0, libcurl will
|
||||
include an upgrade header in the initial request to the host to allow
|
||||
upgrading to http2.
|
||||
|
||||
Possibly we can later introduce an option that will cause libcurl to fail if
|
||||
not possible to upgrade. Possibly we introduce an option that makes libcurl
|
||||
@ -30,10 +31,10 @@ HTTP2 with libcurl
|
||||
|
||||
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.
|
||||
Consider options to explicitly disable ALPN and/or NPN.
|
||||
If CURLOPT_HTTP_VERSION is set to CURL_HTTP_VERSION_2_0, 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. Consider options to explicitly disable ALPN and/or NPN.
|
||||
|
||||
ALPN is the TLS extension that http2 is expected to use. The NPN extension
|
||||
is for a similar purpose, was made prior to ALPN and is used for SPDY so
|
||||
@ -51,15 +52,16 @@ SSL libs
|
||||
GnuTLS: ALPN
|
||||
PolarSSL: ALPN
|
||||
|
||||
Alt-Svc
|
||||
HTTP Alternative Services
|
||||
|
||||
Alt-Svc is a suggested new header with a corresponding frame (ALTSVC) in
|
||||
Alt-Svc is a suggested extension with a corresponding frame (ALTSVC) in
|
||||
http2 that tells the client about an alternative "route" to the same content
|
||||
for the same origin server that you get the response from. A browser or
|
||||
long-living client can use that hint to create a new connection
|
||||
asynchronously. For libcurl, we may introduce a way to bring such clues to
|
||||
the applicaton and/or let a subsequent request use the alternate route
|
||||
automatically.
|
||||
automatically. Spec:
|
||||
http://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-05
|
||||
|
||||
Applications
|
||||
|
||||
@ -70,8 +72,16 @@ curl tool
|
||||
|
||||
curl offers the --http2 command line option to enable use of http2
|
||||
|
||||
To consider:
|
||||
TODO:
|
||||
|
||||
- Implement multiplexing
|
||||
|
||||
- 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?
|
||||
|
||||
- Provide API to set priorities / dependencies of individual streams
|
||||
|
||||
- Implement "prior-knowledge" HTTP/2 connecitons over clear text so that
|
||||
curl can connect with HTTP/2 at once without 1.1+Upgrade.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user