EzDevInfo.com

http-2

Pure Ruby implementation of HTTP/2 protocol draft-ietf-httpbis-http2-17 - Hypertext Transfer Protocol Version 2 (HTTP/2)

HTTP/2 support in tomcat 8

After some research, I was surprised that I did not not find any resource on HTTP/2 support in tomcat. Changelogs of 8.0 indicate an experimental support of SPDY and wiki refers to HTTP/2 as a supported spec (http://wiki.apache.org/tomcat/Specifications) but I don't find any tutorial on it.

Do you know if it is already possible to enable HTTP/2 on tomcat and if the answer is yes how I can do that?

Thanks


Source: (StackOverflow)

Do browser cancel server push when resource is in cache

HTTP2 spec indicates that any resource indentified in a PUSH_PROMISE frame won't be pushed if the client cancels it.

When a browser detects a resource already in the cache, it should cancel the push for this resource. However, I don't see how the browser can detect it. Do the frames provide additional informations like etag or last modified to allow the browser detect if any cache entry must be evicted or if the push could be canceled?

If it's possible, some bandwidth could be saved. However, it seems server-push compromises any client cache optimization.

Thanks


Source: (StackOverflow)

Advertisements

Does HTTP/2 make websockets obsolete?

I'm learning about HTTP/2 protocol. It's a binary protocol with small message frames. It allows stream multiplexing over single TCP connection. Conceptually it seems very similar to WebSockets.

Are there plans to obsolete websockets and replace them with some kind of headerless HTTP/2 requests and server-initiated push messages? Or will WebSockets complement HTTP/2?


Source: (StackOverflow)

node.js server and HTTP/2 (2.0) with express.js

Is it possible currently to get node.js HTTP/2 (HTTP 2.0) server? And http 2.0 version of express.js?


Source: (StackOverflow)

Server-initiated requests

I know that HTTP is a request-response protocol. My problem, in short, is that a client makes a request to the server to start a long running-process, and I want to inform the client of the progress with a simple JSON message containing progress info.

In HTTP/1.1 I know that I could use a WebSocket or server-sent events (SSE) or long polling.

Now I know that HTTP/2 does not support WebSocket yet.

My question is, what is the optimal way to handle such things over HTTP/2?

Are there any new things that I am not aware of to handle server-initiated requests in HTTP/2?

I am using the Go language, if that matters.


Source: (StackOverflow)

How to implement TLS-ALPN in .NET C# for a HTTP/2 server

does anyone know, how I can implement the TLS-ALPN in .NET?

I've implemented a basic HTTP/2 server, but without TLS encryption. I searched in google, but I only found resources for C, Java or other languages, but nothing for .NET (C#)


Source: (StackOverflow)

Why is Wireshark reporting that my HTTP/1.1 connection is issuing a HTTP/2 RESET_STREAM command?

I have a client and server that are both using HTTP/1.1. After a handful of HTTP/1.1 exchanges, Wireshark identifies a single HTTP2 command of type RESET_STREAM (from the client) having an error code of "Unknown".

I am suspicious that Wireshark is erroneously parsing this HTTP2 "message" from the binary data payload of my HTTP/1.1 connection (as controlled by a Content-Length header). However, the fact that my HTTP/1.1 session does not progress as expected in this particular environment, has caused me to wonder what is going on?

Any ideas or comments would be appreciated.


Source: (StackOverflow)

See multiple TCP connections when using HTTP/2 from chrome to node-http2 server

UPDATE (for anyone interested in the outcome :)

I wasn't able to figure out why next protocol negotiation between chrome and node-http2 server fails. My suspicion was self signed certificate or ALPN/NPN support issue. So I moved to golang HTTP/2 implementation. The same setup works perfectly and I see single mutliplexed TCP connection (chrome --> golang)


I have been reading about HTTP/2 and how it solves the latency issue with HTTP/1.1 with single multiplexed TCP connection per host so I decided to try it out.

The experiment

  • created a simple html file with references to one css, one js and couple of images.
  • A simple http server in Node.js which serves all these files
  • Used chrome to make a http request
  • Used tcptrack on Ubuntu (tcptrack) to track TCP connections being made to the http server.

The tcptrack window shows 4 connections established. So the browser is opening different connection for image and css/js request.

Tcp track output for http/1.1 request from chrome

I get similar output using tcpdump. For reference tcptrack command used was

tcptrack -d -i eth0 -r 3600 port 8989

and tcpdump also shows similar output

tcpdump -i eth0 -nns 0 "dst port 8989 and tcp[tcpflags] == tcp-syn"

The simple all in one http server serving these files was something like below (relevant code)

(function(){
  ...........
  var server = http.createServer(function(request, response) {
      ..........
      fs.readFile(filetoRet, function (err,data) {
      if(filePath.indexOf(".jpg") >-1){
        response.writeHead(200, {"Content-Type": "image/jpg"});
      }.....
      
      response.write(data);
      response.end();
      });

   
  });
   

  server.listen(8989);  
})()

After this I tried using http/2.

  • Enabled chrome flag to send http/2 request
  • Created a http/2 server using node-http2
  • The simple http server has the same code as http/1.1 except that it uses http2 server module installed in step 2.
  • Made the request using chrome (It needed to be an https request inline with HTTP/2 spec)
  • Captured tcptrack/tcpdump output

tcptrack output for http/2

So, this still shows multiple TCP connections being made. Also if I increase the number of images in the html, the number of connections increases.

So I am not sure how to read this. Is this how HTTP/2 should behave (or is this a chrome bug)? Is there a better way to visualize the HTTP/2 gains using a simple http/2 client server?

Note:I am using self signed certificate for the HTTP/2 server so chrome throws a warning before proceeding to the page and possibly those closed connections represent it but I don't think it should impact how the page and its components are requested by protocol

Thanks for everyone's patience in reading this and appreciate any suggestions.

msingh

P.S : Wireshark TCP capture is no different. Just that I found it harder to isolate the traffic in Wireshark so used tcpdump and tcptrack.

Update: update: Looking at chrome://net-internals/ the HTTP/2 request negotiation fails and it falls back to using HTTP/1.1. Don't understand the reason yet.

The chrome internal tool events show

t=879052 [st= 0] +HTTP_STREAM_JOB  [dt=19]
                  --> original_url = "https://msinghlinux.ads.com:8900/"
                  --> priority = "HIGHEST"
                  --> url = "https://msinghlinux.ads.com:8900/"
t=879052 [st= 0]   +PROXY_SERVICE  [dt=0]
t=879052 [st= 0]      PROXY_SERVICE_RESOLVED_PROXY_LIST
                      --> pac_string = "DIRECT"
t=879052 [st= 0]   -PROXY_SERVICE
t=879052 [st= 0]   +HOST_RESOLVER_IMPL_REQUEST  [dt=0]
                    --> address_family = 0
                    --> allow_cached_response = true
                    --> host = "msinghlinux.ads.com:8900"
                    --> is_speculative = false
t=879052 [st= 0]      HOST_RESOLVER_IMPL_CACHE_HIT
t=879052 [st= 0]   -HOST_RESOLVER_IMPL_REQUEST
t=879052 [st= 0]   +SOCKET_POOL  [dt=19]
t=879071 [st=19]      SOCKET_POOL_BOUND_TO_CONNECT_JOB
                      --> source_dependency = 26961 (CONNECT_JOB)
t=879071 [st=19]      SOCKET_POOL_BOUND_TO_SOCKET
                      --> source_dependency = 26967 (SOCKET)
t=879071 [st=19]   -SOCKET_POOL
t=879071 [st=19]    HTTP_STREAM_REQUEST_PROTO
                    --> next_proto_status = "negotiated"
                    --> proto = "http/1.1"
t=879071 [st=19]    HTTP_STREAM_JOB_BOUND_TO_REQUEST
                    --> source_dependency = 26910 (URL_REQUEST)
t=879071 [st=19] -HTTP_STREAM_JOB

The value of next protocol is http/1.1 (next_proto_status and proto). But it doesn't say what failed in the negotiation that caused this fallback? Can the self signed certificate be the reason?

HTTP/2 Server code

var options = {
  key: fs.readFileSync('./server.key'),
  cert: fs.readFileSync('./server.crt')
};

options.log = bunyan.createLogger(...);
require('http2').createServer(options,function(request, response) {
      .... same code as http/1.1 server


}).listen(8900);


Source: (StackOverflow)

Java HTTP/2 Server Socket

I want to get server sockets working for HTTP/2 in Java, preferably TLS/https.

I've got a TLS server socket working fine, but browsers will only talk HTTP/1.1 to it. If I understand correctly, you need ALPN to get a HTTP/2 browser to connect to your TLS socket and start running HTTP/2 on it; browsers won't ask for upgrade to HTTP/2 on https. It seems Java8 does not do ALPN so far. Maybe there is some other way to coerce browsers to do HTTP/2, at least non-TLS.

So, anybody know how to make a Java server socket for HTTP/2?


Source: (StackOverflow)

HTTP/2 and Apache2

Is Apache2 planning in implementing HTTP/2 protocol anytime soon ?

I was searching through their website, but I didn't find any information regarding HTTP/2.


Source: (StackOverflow)

Tomcat support for HTTP/2.0?

Does anyone know what is the lowest version of Tomcat that supports HTTP/2.0? I've been looking everywhere on their site and I cannot find any details regarding this.


Source: (StackOverflow)

Is resource bundling needed on SPDY to reduce response times

Here I use the term bundling to refer to concatenate JS and CSS resources together to reduce number of HTTP requests. HTTP/2 solves the underlying issues which gave the birth to resource bundling web development best practices in the first places (round trip times, resource fetch blocking). However, how much SPDY, which is now widely deployed, shares these characteristics with HTTP/2?

If I use SPDY-aware CDN, like CloudFlare, is there any sense to bundle resources anymore if I do not need to care about legacy clients?

Please note that resource transpiling might be done separately from bundling and this question is mainly about response times, not about compiling the code.


Source: (StackOverflow)

NSURLConnection on iOS 9 does not use HTTP/2 protocol

I've configured HTTP/2 on a Jetty 9.3 server, it has a valid certificate and SSLLabs.com given it a grade A security configuration.

Browsing using Chrome to https://example.com loads the correct response, it's also reporting that "h2" (HTTP/2") protocol was used.

But when trying to access the same URL from iOS 9 using NSURLConnection, I can see in the request log that it used HTTP 1.1 instead. If I disable HTTP 1.1 on my server, the request will fail on iOS 9 (but still succeed on Chrome).

NSURLConnection code -

let url = NSURL(string: "https://example.com")
request = NSURLRequest(URL: url, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 10)

connection = NSURLConnection(request: request, delegate: self, startImmediately: true)

Server's ALPN debug output -

[S] ALPN protocols [spdy/3.1, spdy/3, http/1.1] received from client for 1e5e2487[SSLEngine[hostname=3.4.5.6 port=52090] SSL_NULL_WITH_NULL_NULL]
[S] ALPN protocol 'http/1.1' selected for 1e5e2487[SSLEngine[hostname=3.4.5.6 port=52090] SSL_NULL_WITH_NULL_NULL]

In WWDC 2015 it was stated that NSURLRequest in iOS 9 supports HTTP/2, but the client app claims to support spdy/3.1, spdy/3, http/1.1, no http/2. There are no NSAppTransportSecurity exceptions set.

I tried connecting to the server using Safari on the same iPhone Simulator running the app, this time it worked and used HTTP/2, here's ALPN debug output -

[S] ALPN protocols [h2, h2-16, h2-15, h2-14, spdy/3.1, spdy/3, http/1.1] received from client for 7b50217d[SSLEngine[hostname=3.4.5.6 port=52247] SSL_NULL_WITH_NULL_NULL]
[S] ALPN protocol 'h2' selected for 7b50217d[SSLEngine[hostname=3.4.5.6 port=52247] SSL_NULL_WITH_NULL_NULL]

Any ideas why it doesn't use HTTP/2 from within the app?


Source: (StackOverflow)

Is it possible to use HTTP2 with HTTPListener

Is it possible to use http2 features with HTTPListeners yet? I didn't hear anything about it but i heard that the new releases of the IIS / asp.net stack support it so i was hoping HTTPListener would be ugpraded too or an alternative would be provided.

If not what would be the best option to support http2, working with raw sockets or is it possible at all to extend httplistener?

Edit : to clarify i'm not just looking for a solution that "reports" http2 but one that enables me to actually use http2 new features such as pushing content, my use case is i have a custom CMS (self written) server that is extremely low latency (replies near instantly to all requests) and the only thing left to optimise is being able to push content AND being able to multiplex as currently the only speedup i can hope for is avoiding the latency from so many rountrips


Source: (StackOverflow)

How to enable http2 in Windows 10 Server Technical preview

I've just downloaded and installed the VHD of "Windows 10 Server Technical Preview 2 Build 10074"

I've followed the instructions: http://blogs.iis.net/nazim/http-2-for-iis-in-windows-10-technical-preview

..to create a selfsigned certificate, and I'm browsing localhost via IE11 and I don't get any http2 indication in F12 developer tools, like the link implies. Browsing using another machine and chrome with the http2/spdy extension also doesn't indicate http2 traffic.

Am I missing a configuration step?

enter image description here


Source: (StackOverflow)