Думаю, я понял это. Не стесняйтесь, однако, поправьте меня. Кэширование веб-сайтов - очень грязная область.
Корень проблемы в том, что iPhone не отправляет заголовки «If-Modified-Since» со своими запросами. Без этого сервер не может ответить с 304.
После некоторых экспериментов я обнаружил, что если вы используете ссылку для перехода на страницу, она отправит заголовок 'If-Modified-Since', и все будет работать, как ожидается, и сервер аккуратно вернет 304.
Случаи, когда не отправляет «If-Modified-Since», даже если оно кэшировано:
- Введите URL-адрес
- Нажатие кнопки обновления
- Выбор URL и нажатие Go
- Открытие в виде закладки
- Открытие из сохраненной ссылки на главном экране
Кажется, это делается только для основного URL-адреса, а все остальное, на которое ссылаются, имеет заголовок «If-Modified-Since» (где применимо).
Примечание: я проверял это только на IOS 4.3.1. Глядя на ссылку, которую отправил Paddo, и на дальнейшие исследования в этой области, кажется, что Apple любит менять поведение кэширования между версиями IOS.