4
votes

from Dive into HTML5: Cache Manifest: Fallback section

CACHE MANIFEST
FALLBACK:
/ /offline.html
NETWORK:
*

i dont understand from the URL given what this block of code exactly does. does the fallback section mean when anything is not found, show the offline.html page

then network: * all resources will be cached? it says also

It uses common CSS, JavaScript, and images on each page. Each of these resources would need to be listed explicitly in the CACHE

this seems to conflict to network: * where it seems to say cache everything?

2

2 Answers

14
votes

There are three types of headings in a cache manifest, CACHE, NETWORK and FALLBACK. Anything that is not under a heading is implicitly set under CACHE. An explanation of each section:

CACHE: Files under this heading will be cached.

NETWORK: Files under this heading require an internet connection and so will be NOT be cached.

FALLBACK: Files matched by patterns under this heading (Such as the pattern "/", which matches all files) and have not been cached, will have a fallback file shown instead.

With regards to the block of code from Dive into HTML 5, there is an explanation of the "NETWORK: *" part just under it:

It means that, while you’re browsing this hypothetical offline-enabled Wikipedia online, your browser will fetch images and videos and other embedded resources normally, even if they are on a different domain. (This is common in large websites, even if they aren’t part of an offline web application. HTML pages are generated and served locally, while images and videos are served from a CDN on another domain.) Without this wildcard flag, our hypothetical offline-enabled Wikipedia would behave strangely when you were online — specifically, it wouldn’t load any externally-hosted images or videos!

The following quote:

It uses common CSS, JavaScript, and images on each page. Each of these resources would need to be listed explicitly in the CACHE

means that you must include all necessary CSS, Javascript and image files in the manifest under the CACHE heading. It does not conflict with 'NETWORK: *' because the NETWORK heading does NOT mean 'cache everything'. It actually means the opposite: that everything under the NETWORK heading requires an internet connection and should not be cached.

7
votes

I have found out more useful stuff about FALLBACK:

After a bit of experimenting, I tried various things including whether files in FALLBACK: should appear in the CACHE or NETWORK sections at all. The answer seems to be no.

As an example... FALLBACK: sign-up-portrait.png offline-portrait-1.png sign-up-landscape.png offline-landscape-1.png

I specified this in one of my micro sites recently. The intention is to show the sign-up- png files when online and the offline- png files when offline. This works well. In particular the files on the left side of each line are implicitly as if they were in the NETWORK section, the site will always try to get them online. They must not be added to the NETWORK section as well, otherwise it seems to override what's in FALLBACK. Plus, happily, the files on the right are implicitly as if added in the CACHE: section so even if they are not used at first, they are cached on first load without having to explicitly add them to CACHE: although you can add them there too if you want. It makes no difference.

For this configuration, looking at the webserver logs, I see that each time the page is refreshed, apache logs a 304 against the manifest file and against the sign-up- png file that's required for that version of the page (there's a CSS media selector determining which, based on page size). So it's correctly always checking for the sign-up- png files as well as the usual manifest checking, which is exactly what I want.

For the sake of being thorough, I tried to see if the root file needs to be in the CACHE: section too. It turns out it doesn't! If your top level file is index.html and it has the manifest file specified in its html tag then the manifest file need not contain index.html anywhere, it's implicitly cached.

I am curious how far the app cache can extend. Can you include other html files that are linked to or in iframes? Or do those all need to have their own manifest files that are separate? Anyone care to comment?

A side comment about format, don't make the mistake I did, which is to put in... NETWORK file1.js

Missing the colon causes it to totally break, thinking that NETWORK is a resource in its own right.

It must be... NETWORK: file1.js