Just disable the device emulator inside chrome if you are using it or see below the long explanation on how to fix.
Just found the problem for me. I was busy building a mobile site, so while building it I used Google Chrome developer tools for emulating the User Agent / Device emulator.

Once I turned this off this feature it worked just fine.

The problem seems to be that the user agent being passed to the main loading of the page and the user agent for the manifest does not match thus giving an error as my code would redirect (302) a user if not visiting via a mobile device.
The user was theoretically visiting via a mobile device but Chrome does not send the "fake" user agent set on the device selector through when requesting the contents of the manifest.
So here we get the main page:
127.0.0.1 - - [31/Aug/2016:12:53:58 +0200] "GET / HTTP/1.1" 200 7578 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
Then the manifest is retrieved:
127.0.0.1 - - [31/Aug/2016:12:53:58 +0200] "GET /manifest.appcache HTTP/1.1" 200 130 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
Then it tries to get the main page to index it but the user agent is incorrect here:
127.0.0.1 - - [31/Aug/2016:12:53:58 +0200] "GET / HTTP/1.1" 302 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"