After reading many different articles, papers and blog-posts on the subject of HTTP2, including Wikipedia's HTTP2 page, and even some of the HTTP2 devs/engineers tweets about HTTP2, I am still a little unclear on the exact state of HTTP2's compatibility & support.
I read a lot about HTTP2 today, and several times it was noted that "HTTP2 is backwards compatible". I also read that upon HTTP2's initial release, the new communication technology wasn't supported by any of the contemporary, big-named browsers. Admittingly I probably have a lack of understanding for the true meaning of the words 'Backwards-Compatible,, and 'support', though; isn't it fair to assume that if HTTP2 is backwards compatible, it should in turn work anywhere where HTTP1.x will work? The whole reason for HTTP2 to be backwards compatible, was so that, essentially, HTTP2 would NOT break the World-Wide-Web? Thinking of it like that, the only option, to me, that made since was Backwards compatibility, but what is the point of HTTP2 being backwards compatible if browsers have to come out with support updates for it to be compatible anyways?
Where I am really confused is where this leaves pretty much everything. I know the big browsers now support HTTP2 for the most part, but what about the old browsers? Netscap-8 and IE-9 are not going to get any new updates anytime soon, realistically, ever... So are the fates of the legacy browsers, like Netscape and IE, doomed by the coming of the new HTTP technologies (considering HTTP3 already exists too...)?
So the whole reason I am asking about all this is because I have started my next project and I want the server to use HTTP2 for its communications. It is a Node.js application, and I am building a small framework, rather than using express so I can go through, and write the HTTP2 server myself, so I gain insight of HTTP2 and the Node.js HTTP2 API. What I am wonder is where HTTP2 is compatible? Or should I not be worried about it? Native NodeJS released a module in its later versions at some point, and it is equipped with an API. The API is called the "Comparability API". I know little about it, but I do know that it is capable of building an application that supports both HTTP/1 and HTTP/2, however, I don't know if this is something I need. How do I ensure that my HTTP2 Application will load on browsers at-least IE9 and newer?
You're misunderstanding the term backwards compatible. It doesn't mean backwards supported - it just means it is not a breaking change and HTTP/1.1 browsers can still connect and continue to use HTTP/1.1 without any change.
HTTP/2 has a number of way to detect if it supported by browser and server and only use it if both do, and continue to use HTTP/1.1 if they don’t. It even specified how to fall back if those detections fail and an HTTP/1.1 client connects and tries to talk HTTP/1.1 when the server thought this was an HTTP/2 connection. This means old browsers (eg. IE9) are not expected to know about HTTP/2.
A non-backwards compatible change would be if all browsers had to send a new version setting that they didn't send before to explicitly ask the server to talk HTTP/1.1. That would mean IE9 and the like couldn't connect to a server that supported HTTP/2 at all, without an update.
In general the web works very hard to make sure changes are backwards compatible and old software can still work - even if it's a degraded experience for those older clients. Realistically backwards compatibility is the only way to roll something out to the Internet as otherwise adoption is severely restricted as few will want to cut off older browsers like that.
So, for you, this means your server needs to support both HTTP/1.1 and HTTP/2. I imagine most servers will support this (and even HTTP/1.0) for a loooong time and HTTP/2-only servers will be very rare and unlikely to be installed as public web servers.
The Node Compatibility API basically takes care of this for you. You create an HTTP/2 server and it automatically supports HTTP/1.1 as well for you and uses that if it needs to (e.g. old clients or those behind a proxy that doesn't support HTTP/2).
It does mean however you can't assume your web visitors will be on HTTP/2, and some things that work better under HTTP/2 (e.g. sending more smaller resources, rather than fewer larger resources) might be worse for HTTP/1.1 visitors. But it will still work.