Unfortunately, HTTP caches have opaque, browser-provided semantics that work sometimes and mysteriously don't work in other cases.<p>They can't be used to ensure that you have a complete atomic set of application assets, are often purged in ad-hoc ways by browsers, and in general aren't a good hint to browsers about exactly what the semantics of the caches are.<p>ServiceWorker gives applications control over many of these considerations in a programmable way. If you've ever tried to work with AppCache or control time-to-boot in the context of possibly-warm HTTP caches, you know that this is a godsend.<p>Which isn't to say that people shouldn't make the best use of HTTP caches, nor that HTTP caches aren't currently underutilized. It's just to say that the control offered by ServiceWorker will make it far easier to control the nitty-gritty of caching behavior, which matters a lot.
I've made a longer comment on G+, but in short: if you max-age your page for a decent length of time, you lock users into that version of the page. Shipping any kind of update means waiting for that max-age to expire.