http-2
Pure Ruby implementation of HTTP/2 protocol
draft-ietf-httpbis-http2-17 - Hypertext Transfer Protocol Version 2 (HTTP/2)
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)
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)
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)
Is it possible currently to get node.js HTTP/2 (HTTP 2.0) server? And http 2.0 version of express.js?
Source: (StackOverflow)
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)
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)
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)
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.

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

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)
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)
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)
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)
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)
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 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)
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?

Source: (StackOverflow)