I posted this on Tom Eyckmans’ blog (http://blog.iadvise.eu/2015/01/12/http2-server-push/), but I figure this is a better place for the discussion since there seems to be a problem with the push mechanism itself…
First of all Tom, great work on making this example. I tried creating a similar jetty push example and failed miserably :) I hate to break it to you, but the http2-push site is pushing a different url from the requested one so the pushes are wasted. Hitting the url https://localhost:8443/blog-http2-push/push?push=true&rows=0&columns=1(I had to look at the source to determine the ?push=true was required for push) If you look in the Chrome (Canary build 42) chrome://net-internals/#events screen and find your SPDY_SESSION you can see that the push promise has a url of /blog-http2-push/blog-http2-push/images/slice_0_0.jpg?push=true&rows=0&columns=1
where as the url requested in the page is just
/blog-http2-push/images/slice_0_0.jpg
So there are 2 problems there … the pushed url path has an extra blog-http2-push in it and the pushed url has the querystring in it.
I tried fixing the servlet code but not calling the absoluteResourcePath method and by setting the query tring to null. pushBuilder.setQueryString(null); And then I could see the SPDY_STREAM_ADOPTED_PUSH_STREAM events happening in Chrome, but there was some sort of timeout and the client closes the streams and the pushed resources were not loaded at all.
Here is what I see in the debug log
2015-01-18 10:11:58.898:DBUG:oejhs.HttpChannelOverHTTP2: qtp565760380-27: HTTP2 PUSH Request #240/798f5a73: GET https://localhost:8443/blog-http2-push/images/slice_5_19.jpg HTTP/2 accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 accept-encoding: gzip, deflate, sdch accept-language: en-US,en;q=0.8 cache-control: public, max-age=777 pragma: no-cache user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2278.0 Safari/537.36 referer: https://localhost:8443/blog-http2-push/push…. 2015-01-18 10:11:58.899:DBUG:oejhs.HttpChannelOverHTTP2: qtp565760380-27: HTTP2 Commit Response #1/798f5a73: HTTP/2 200 null Server: Jetty(9.3.0-SNAPSHOT) Content-Type: text/html;charset=iso-8859-1 2015-01-18 10:11:58.899:DBUG:oejhs.HttpTransportOverHTTP2: qtp565760380-27: HTTP2 Response #1: HTTP/2 200 Server: Jetty(9.3.0-SNAPSHOT) Content-Type: text/html;charset=iso-8859-1 …. 2015-01-18 10:11:58.900:DBUG:oejhs.HttpTransportOverHTTP2: qtp565760380-27: HTTP2 Response #1 committed … 15 seconds later ... 2015-01-18 10:12:13.801:DBUG:oeji.IdleTimeout: Scheduler-1530388690: HTTP2Stream@48dd8f83{id=2,sendWindow=10485760,recvWindow=65535,reset=false,REMOTELY_CLOSED} idle timeout check, elapsed: 15004 ms, remaining: -4 ms 2015-01-18 10:12:13.801:DBUG:oeji.IdleTimeout: Scheduler-1530388690: HTTP2Stream@48dd8f83{id=2,sendWindow=10485760,recvWindow=65535,reset=false,REMOTELY_CLOSED} idle timeout expired 2015-01-18 10:12:13.801:DBUG:oejh.HTTP2Stream: Scheduler-1530388690: Idle timeout 15000ms expired on HTTP2Stream@48dd8f83{id=2,sendWindow=10485760,recvWindow=65535,reset=false,REMOTELY_CLOSED} |