On the next request, it will try to read from cache, find a Last-Modified
or ETag
entry and send an If-Modified-Since
or If-None-Match
header. The server correctly responds with a 304 Not Modified
, and the browser attempts to serve the page from cache. Unfortunately, the cache entry is incomplete and the result is a blank/white page.
There are multiple ways of cancelling the request; poor connection, double taps on the refresh button etc. See the YouTube-video for a demonstration.
The problem exists in the latest iOS7 at the time of writing (7.0.2) and has existed since the beta.
This is how we fixed the problem at VG
In front of all our web servers we use Varnish. Varnish handles every end-user request, asks the backend and caches the content. To ensure that iOS7-users does not end up with blank pages, we have to deliver a 200 OK
even where a 304 Not Modified
would be the correct response. To do this, we created a Varnish rule which removes the If-Modified-Since
and If-None-Match
headers on request and then have Varnish deliver the content as normal. This rule only applies to iOS7-devices, since this is where we know the problem exists.
We made a short video illustrating the problem below:
https://www.youtube.com/watch?v=CGA3LKP1tp8
Hopefully, Apple will push an update that fixes this problem soon so we can remove the workaround and optimize the loading of our websites.