iPhone не кэширует страницы Asp.Net - PullRequest
1 голос
/ 09 апреля 2011

Если я создаю базовое приложение asp.net и устанавливаю @outputcache, страница отлично кэшируется в chrome & IE на рабочем столе. Первый запрос возвращает 200, последующий запрос возвращает 304 для default.aspx. (Я отслеживаю через фиддлер)

Однако, обращаясь к той же странице с iPhone, я заметил, что он всегда возвращает 200 для файла aspx. Все ресурсы кэшируются и возвращаются 304. Так что это просто страница aspx.

Есть идеи, почему это происходит?

Некоторые технические данные:

  • <% @ OutputCache Duration = "30" VaryByParam = "None" Location = "Any"%>
  • Стандартная страница ASPX. Длина контента: 2464
  • Перезагрузка на iPhone с помощью управления обновлением или клавиатуры «go» не имеет значения.
  • Явная установка eTag не имеет значения
  • Последнее изменение установлено
  • но If-Modified-Since не отправляется на страницу ASPX
  • Последний IOS 4.3.1
  • IIS 7.5, работающий на Win7 с использованием ASP.NET 4

Ответы [ 3 ]

1 голос
/ 09 апреля 2011

Думаю, я понял это. Не стесняйтесь, однако, поправьте меня. Кэширование веб-сайтов - очень грязная область.

Корень проблемы в том, что 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.

0 голосов
/ 09 апреля 2011

Нашел это, re php (также применимо к .net) ... Кажется, что iphone не кэширует ресурсы размером более 15 КБ, а общий размер кэша составляет 1,5 МБ.Обратите внимание, что это старая информация, поэтому она могла измениться.

http://www.phpied.com/iphone-caching/

Решение для файла размером более 15 КБ заключается в использовании файла манифеста кэша автономного приложения, как показано здесь: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/Client-SideStorage/Client-SideStorage.html

PS Я знаю, что длина вашего контента меньше 15 КБ, поэтому что-то еще должно быть не так ... но я все еще надеюсь, что файл манифеста будет работать.

0 голосов
/ 09 апреля 2011

для ASP.NET просто используйте

Response.AddHeader( "Cache-Control","no-cache");

или

Response.AddHeader( "Pragma", "no-cache");

или

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...