On Fri, 28 Mar 2014 22:38:25 +0100 (CET), Daniel Stenberg wrote: > Google does not believe in doing plain-text http2 so I think this is on > purpose. They will simply require https to speak http2. > > That's basically the same situation like with SPDY.
I notice with Firefox etc, Google's homepage just redirects to the secure version, so it's odd we get a 400 here rather than a 302 redirect. Twitter - which fully supports HTTP2 as far as I can tell from the Curl logging - redirects to the secure version of their site rather than throwing up a 400. > If it isn't just an oversight or just-not-implemented-yet on their part, > there's nothing libcurl can do. The plain-text way to do http2 is to use > Upgrade: exactly like that but it of course only works if the server then > responds with an actual upgraded protocol... Hmm, OK. The more I think about this the more it seems like a server problem. If it isn't talking plain text HTTP2, then it ought to be ignoring the Upgrade: header anyway? I found another plain text http2 problem after I posted that. On the nghttp2 test server libcurl gets stuck requesting data. Again, the easy test is with the curl command line tool: curl -v --http2 http://106.186.112.116/ The output is attached. Thanks Chris
* Hostname was NOT found in DNS cache * Trying 106.186.112.116... * Connected to 106.186.112.116 (106.186.112.116) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.36.0 > Host: 106.186.112.116 > Accept: */* > Connection: Upgrade, HTTP2-Settings > Upgrade: HTTP-draft-09/2.0 > HTTP2-Settings: AAAABAAAAGQAAAAHAAD//w== > < HTTP/1.1 101 Switching Protocols < Connection: Upgrade < Upgrade: HTTP-draft-09/2.0 * Received 101 * We have switched to HTTP2 * http2_recv: 16384 bytes buffer * nread=3311 * nghttp2_session_mem_recv() returns 3311 * before_frame_send() was called * on_frame_send() was called * before_frame_send() was called * on_frame_send() was called * http2_recv: 16384 bytes buffer * nread=8 * on_frame_recv() was called with header 4 * nghttp2_session_mem_recv() returns 8 * http2_recv: 16384 bytes buffer * nread=16 * on_frame_recv() was called with header 7 * nghttp2_session_mem_recv() returns 16 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 * http2_recv: 16384 bytes buffer * nread=0 * nghttp2_session_mem_recv() returns 0 *** BREAK
------------------------------------------------------------------- List admin: http://cool.haxx.se/list/listinfo/curl-library Etiquette: http://curl.haxx.se/mail/etiquette.html
