The HTTP/2 implementation
mailman.nginx.org
mailman.nginx.org
HTTP/2 1.46s
And 2.31 vs 0.64 at the second
I wonder if there's some setting wrong that makes this take 14s for me using http/1. Any ideas?
Edit: same with Chrome and similar on Sarafi/iPhone (6s vs 0.6). I wonder if the difference is magnified by higher latency because I'm in Europe? If yes, I guess http/2 is a godsend for all non-Americans.
You're right that in FF/Chrome for runs N+2 I get about half of the first run (0.86s for v2) so it looks like there's some kind of caching going on -- it's still twice as fast with v2.
HTTP/1.1: 2.06s HTTP/2: 0.45s
with Chrome 45 on 64-bit Debian 8
I do get better times for 2 on Firefox, but if I start Firebug and disable caching, the http 1 time does not change, but http 2 is bigger and at that point 2 is better by fraction of second (sometimes worse).
Interestingly on Konqueror http is consistently worse than http 1.
If a page that was designed to highlight performance of something that http 2 should be better at (making many small requests) doesn't show drastic improvement and sometimes http 2 looks worse, makes me doubt whether http 2 brings anything to the table
I'm not saying the test is "fair" but what you're describing isn't a fair scenario at all. I'm not sure if the latest fiddler or other dev proxy supports http2, but that might be a better way to judge.
Also, are you sure the the version of Konqueror you are using is actually using http2, or a fallback to 1.1?
HTTP/2: 1.09s, 0.87s, 1.19s, 0.92s, 1.30s = average 1.07s
The slowest of five HTTP/2 results is still faster than the fastest HTTP/1.1 result, and on average it's nearly 50% faster.
(I'm on a 37 Mbps network in New York, using Firefox 40.0.3 on Windows 8.1 with a cleared cache.)
I'd like to know more about how this benchmark runs and what it's actually measuring. Page load times and responsiveness are notoriously hard to define.
I don't mean to nitpick the benchmark too much, it's obviously measuring something, but it's also nice to be able to weigh it against other tests and design goals.
The HTTP/2 test does exactly what it's designed to do: opens a lot of connections and receives the images pretty much all at once.
This isn't to downplay HTTP/2, but it's something that should be noted for _this_ test.
I believe that HTTP/2 isn't opening many connections. It's opening one TCP connection and multiplexing many requests through that. This would allow for exploiting a pre-warmed TCP connection in subsequent requests. I've always felt that was a flaw in HTTP/2: with minor modifications, that multiplexing protocol could have been split out.
I'm interested to see how HTTP/2 could accelerate your modern jumbo media websites. The ones with a dozen or so tracking bugs, ads, etc. All splattered across multiple domains with ad servers that aren't quite as zippy as one would wish.
I'm probably an outlier.
Moto g, android 5.0.2, HSPA, chrome.
http/1.1 29.75, http/2 12.87
There is world map at the bottom of the page.
Feels like they may have exaggerated their fiber coverage of Greenland :)
- Loading 250 resources from the exact same domain, where HTTP/1.1 can load at most 2-6 in parallel
- Head of line blocking since all requests are going to the same host
- 4-6x as many TCP connections with HTTP/1.1, so 4-6x more likely to encounter TCP congestion/flow issues.
This test is only relevant to you if your website only uses a single hostname, and loads all dependent resources from that same hostname. Sadly the median number of domains accessed for a typical webpage is 18...
If you have more than 2-6 of your own resources (scripts, CSS, images) on a page it should be. Third party resources is orthogonal to that.
1.1 2.0
--- ---
2.03 3.60
2.00 3.19
1.85 1.92
1.72 3.69
2.11 4.64
2.13 4.13
1.92 2.35It's just netting you a larger share of the limited network resources at the expense of others on the network.
Not very dramatic diffence. Location Europe, using 4G connection.
HTTP 2.0 is surely nice for initial page load but for subsequent data loads I prefer websocket (in the context of SPAs).
There is notable difference here. Developer needs to write code to implement server-push in Websockets but HTTP2 servers will do that for you by sending all dependancy files with a single request.
Can nginx itself automatically parse HTML/CSS and send required resources?
Is there a mechanism for the proxied application to specify additional resources? (for JavaScript use)
HTTP/2's 'Server Push' feature is not supported in this patch and will not be supported in the first production-ready release of the HTTP/2 implementation. This feature might appear in a future NGINX release. [1]
I believe that it's going to take a while to find good heuristics that work in most of the cases. Until then only big companies like Google will have the financial incentive to develop their own custom version that's tailored to their specific use-case.
Once you've got code running on the client then there's significantly less need for server push, as you can initiate requests in a bunch of ways, XHRs or <img> tags etc.
Server push's big win is in getting necessary resources down to the client on the initial page load without waiting for numerous round. As such, you'll see the biggest gains on high latency connections, e.g. mobile.
That they are working on it is well known for quite some time - am I missing something?
https://www.nginx.com/blog/nginx-plus-r7-released/
"The update provides a fully supported implementation of the new HTTP/2 web standard, the first of its kind for a leading web server."
and
"Note: Based on user testing of the alpha-level patch, and with the early support from corporate co-sponsors Automattic and Dropbox, the final open source version of HTTP/2 will become available following the release of R7."
Let's say you build a closed source configuration tool which works for AGPL webserver and a non AGPL webserver, then you wouldn't violate the AGPL as long as the AGPL webserver won't be changed and just be used.
Does a demo like that exist?
Examples of cases where unencrypted HTTP makes sense:
* Public, non-sensitive content that you need to distribute or broadcast using CDNs (such as Amazon's), who may charge you hundreds or thousands of dollars to install a custom server certificate if you want to use your own domain
* Servers with limited CPU power and which are not serving sensitive content (e.g. embedded devices, Raspberry Pis, Arduinos et al.)
* Getting a website up for $0.00 without paying some troll corporation to "validate" your certificate
* Getting a website up to distribute information without revealing YOUR identity
In any case, there are use cases, and it should not be the job of the browser to police this.
If TLS is mandatory, the price of this will have to go down
> * Servers with limited CPU power and which are not serving sensitive content (e.g. embedded devices, Raspberry Pis, Arduinos et al.)
I've served TLS off embedded devices like these no problem
>* Getting a website up for $0.00 without paying some troll corporation to "validate" your certificate
Certificates are free (WoSign, StartCom, LetsEncrypt)
>* Getting a website up to distribute information without revealing YOUR identity
None of the free CAs validate anything beyond your email address (StartCom demands an address, but they don't seem to do much beyond validate that it's a valid address). DV certs are not to validate identity, just that you are the domain owner
I doubt it -- Raspberry Pi is easy, but even HTTP on an Arduino would be a stretch.
On e.g. a esp8266 you can only have a single TLS connection at a time. While you can have hundreds of normal TCP sessions.
> Certificates are free (WoSign, StartCom, LetsEncrypt)
- WoSign doesn't work on mildy old devices
- StartCom certs are expensive to revoke
- LetsEncrypt doesn't exist yetThe browsers are the client and they decided to require encryption.
It's infuriating that they seem to think this is part of their role now. I don't see how forcing you to go through a CA promotes participation.
CDNs (well, CloudFront and CloudFlare but I assume this is the same for others) only charge you for using custom SSL certs if you can't get by with SNI, since it means they have to provision IPs at every endpoint.
With HTTP2, SNI isn't an issue.
Http/1.1: 12.60s, 20.25s Http/2: 38.15s, 30.06s
Might be an issue with a transparent proxy.
I managed to get my own site going with SPDY 3.1 draft, so I'm quite eager to get HTTP2 support going - if not for it's multiplexing, just to be ahead of the curve!
> The SPDY support is removed, as it's incompatible with the new module.
They are treated as syntax errors, but I think it does give an error message that spdy is deprecated and to remove.
Will this be a drop in replacement for 1.1 with nginx? will nginx fall back to 1.1 on browsers that don't support 2?