Files correlati : Commento : Spostamento in libraries delle librerie esterne di Campo per una maggiore pulizia e organizzazione git-svn-id: svn://10.65.10.50/branches/R_10_00@24150 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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
 | |
| 
 | |
|  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 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
 | |
| 
 | |
|   We require at least version 0.6.0
 | |
| 
 | |
|  Over an http:// URL
 | |
| 
 | |
|   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
 | |
|   use http2 at once over http://
 | |
| 
 | |
|  Over an https:// URL
 | |
| 
 | |
|   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
 | |
|   early http2 servers are implemented using NPN before ALPN support is
 | |
|   widespread.
 | |
| 
 | |
| SSL libs
 | |
| 
 | |
|   The challenge is the ALPN and NPN support and all our different SSL
 | |
|   backends. You may need a fairly updated SSL library version for it to
 | |
|   provide the necessary TLS features. Right now we support:
 | |
| 
 | |
|     OpenSSL:  ALPN and NPN
 | |
|     NSS:      ALPN and NPN
 | |
|     GnuTLS:   ALPN
 | |
|     PolarSSL: ALPN
 | |
| 
 | |
| HTTP Alternative Services
 | |
| 
 | |
|   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. Spec:
 | |
|   http://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-05
 | |
| 
 | |
| Applications
 | |
| 
 | |
|   We hide http2's binary nature and convert received http2 traffic to headers
 | |
|   in HTTP 1.1 style. This allows applications to work unmodified.
 | |
| 
 | |
| curl tool
 | |
| 
 | |
|   curl offers the --http2 command line option to enable use of http2
 | |
| 
 | |
| 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.
 | |
| 
 |