Settings

Theme

Apache 2.4.17 with HTTP/2 support

icing.github.io

203 points by signaler 10 years ago · 28 comments

Reader

Tepix 10 years ago

That's great news! I look forward to test this. I saw that the Ubuntu apache ppa at https://launchpad.net/~ondrej/+archive/ubuntu/apache2 already has packages for this version (not tested by me).

What's sad is that this is yet another github page with #777 colored text on white background. The resulting contrast is too low to read comfortably!

skrause 10 years ago

No mention of server push, so I assume it's not supported?

  • mholt 10 years ago

    Here's a blog post I wrote about why this probably isn't implemented in most servers yet: https://caddyserver.com/blog/implementing-http2-isnt-trivial

    • spankalee 10 years ago

      There a few claims you have that I think are slightly off.

      First, push is very different than inlining, because individual resources are cacheable by the client, and inlined resources are not. There's a little handshake at the start of a push and if the client has (or doesn't otherwise want) the resource, it can cancel the push.

      In my team's experiments with using push for HTML Imports, push ends up being better than inlining (using Polymer's vulcanize tool), even with a cold cache.

      Also, push is relatively easy to implement if you use the response header approach, and was availably early on in mod_spdy.

  • dtech 10 years ago

    Reading the page it seems like it is still in quite an early state, I expect they have higher priorities.

  • tootie 10 years ago

    How would server push from a web server work?

    • pquerna 10 years ago

      Other comments are are good starts.

      Another method would be to add a headers to the response:

          Server-Push: /relative/url
      
      Then have an output filter pull them out and push them -- but AFAIK the APIs to do that don't yet exist in mod_h2 to push like that. Adding headers in the response is nice because it works with any 'backend', and the web server doesn't have to parse the HTML/css/etc going the through it.
    • acdha 10 years ago

      The simplest way would seem to be a directive to push static resources:

          <Location />
              ServerPush /static/css/main.css
              ServerPush /static/js/main.js
          </Location>
      
          <LocationMatch "^/$">
              ServerPush /static/img/gigantic-homepage-image.jpg
          </LocationMatch>
      
          <Location /maps/>
              ServerPush /static/js/leaflet.js
          </Location>
      
      I believe this could even avoid the need to include cache-busters in the URL since you could push with an ETag and the client can terminate if it already has the appropriate bytes without the incredible performance hit of using ETags with HTTP 1.
      • thethimble 10 years ago

        I think this is unsustainable (any non-trivial change to your html resources would require updating and restarting httpd). This is not DRY.

        Jetty's approach to this problem is really interesting. Using HTTP referrer headers, it builds up a tree of resources that are often fetched together. Then, it optimistically pushes companion resources down. https://github.com/eclipse/jetty.project/blob/master/jetty-s...

        • acdha 10 years ago

          You'll note that I said “simplest” – this could work on a $2/month shared hosting plan (not sure where you got the “updating and restarting httpd” bit from with a couple decades of prior art showing otherwise).

          The Jetty approach is clever, too, as would be things like scanning rel=prefetch links but simple declarative approaches have their moments, too. One thing the Jetty approach doesn't appear to offer is the ability to manage resources if not all resources are appropriate for every client so it would appear to do things like ship every size of a responsive image to every client.

    • Tobani 10 years ago

      If the server can parse served html, it could preemptively also send along other required assets (css, images, etc) before the client has time to parse and request them. This would help remove necessity for optimizations like image bundling.

vpkaihla 10 years ago

They added a significant new protocol in a minor upgrade. Is that right?

  • dtech 10 years ago

    Apache version numbering is similar to what the linux kernel used before 2.6.

    In a.b.c, odd b indicates the unstable or experimental branch, and even b's are used for major and backwards-compatibility breaking changes. Backwards-compatibility preserving changed can be introduced in c.

    So 2.2 and 2.4 are pretty different versions, while 2.3 and 2.4 are closer except 2.3 is unstable. 2.4.0 is theoretically compatible with 2.4.17, except the latter has a lot more functionality and features.

  • chrisseaton 10 years ago

    If all it does is add new functionality, and doesn't modify or break any existing functionality, then that seems to be good software engineering to do in a minor upgrade doesn't it?

    • dtech 10 years ago

      If you follow semantic versioning, the third number should only be used for bugfixes. They don't.

  • dspillett 10 years ago

    Seems valid: MAJOR.MINOR.PATCH, with the minimum changes being increment "patch" for backwards compatible bug fixes, "minor" for new/improved functionality that does not break backwards compatibility, and "major" for any API/feature change that is not backwards compatible. They could of course chosen to increment MAJOR instead, but they don't have to in this case.

    (I'm assuming they are following "standard" semver rules here)

    • dtech 10 years ago

      They don't use semver, and their versioning scheme precedes semver.

    • skrause 10 years ago

      In your example MAJOR.MINOR.PATCH they actually only increased PATCH, Apache 2.4.0 was released in early 2012.

      • dspillett 10 years ago

        Ah, I was assuming the mention of "minor" in the post I replied to was referring to minor in the semver sense, without actually checking. My bad.

    • ta0967 10 years ago

      "backwards compatible bug fixes" don't exist: fixing a bug changes the program's behavior.

      • dspillett 10 years ago

        Compatibility in this case is referring to published APIs and not changing documented behaviour. There are a large family of changes that are bug fixes that don't change correct use of an API - many security fixes for example.

  • barkingcat 10 years ago

    why wouldn't it be right? Not everyone uses semver, and apache project version #'s precedes semver by a long while.

  • laumars 10 years ago

    It's an optional module rather than changing the core logic (as 2.2->2.4 did), so in that regard it makes sense to only up the minor version number.

  • marktangotango 10 years ago

    A better title would probably be: with OPTIONAL http2 support.

  • itsbits 10 years ago

    not defaulted as http2 though.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection