Настройка кеша с помощью Django для решения проблемы IE «страница устарела» - PullRequest
2 голосов
/ 17 июля 2009

У меня есть знакомая проблема. Я использую Django-0.97 и не могу обновить - хотя используемая версия Django не должна играть никакой роли в причине проблемы.

У меня есть представление поиска, которое представляет форму пользователю и при отправке формы через POST выполняет тяжелые вычисления и отображает список элементов, которые генерируются в результате этих вычислений. Пользователи могут щелкнуть ссылку «дополнительная информация» любого из этих элементов, чтобы просмотреть страницу сведений об элементе.

Пользователи на IE , как только они окажутся на странице сведений об элементе для любого элемента со страницы результатов поиска, срок действия веб-страницы Знакомый истек, нажмите кнопку обновления, yadda yadda yadda "ошибка , когда они нажимают кнопку" back"в браузере. К сожалению, значительное большинство пользователей сайта используют IE, не разбираются в технологиях и жалуются на эту проблему.

Думая, что установка бэкэнда кэша может решить проблему, я настроил простой бэкэнд кэша. Я жонглировал с кешем для каждого сайта и для каждого просмотра, но безрезультатно. И теперь я не уверен, что правильно настроил кеш.

Будем очень благодарны за любые подсказки, предложения, которые могут помочь в смягчении проблемы.

Спасибо.

ОБНОВЛЕНИЕ (20 июля 2009 г.)

Я использовал Fiddler для проверки заголовков HTTP как запроса, так и ответа. IE отправляет заголовок Pragma: no-cache в запросе POST. Ответ HTTP, сгенерированный в результате запроса, имеет следующие заголовки:

Cache-Control: public, max-age=3600
Date: someDateHere
Vary: Cookie

И да, я не использую шаблон PRG.

Ответы [ 2 ]

2 голосов
/ 19 июля 2009

Возможно, вам понадобится использовать шаблон PRG ( Post / Redirect / Get ). С этим шаблоном обработчик для POST будет:

  1. выполняет тяжелые вычисления, определяет результаты поиска и сохраняет их в сеансе пользователя (или сохраняет их в БД, заданной сеансом пользователя).
  2. Отправьте ответ с заголовком перенаправления на идемпотентную страницу, которая затем выбирается браузером с помощью GET, когда оно следует за перенаправлением.

При доступе к перенаправленной странице сервер отображает страницу результатов поиска, вычисленную на основе сохраненных данных в сеансе, и по URL-адресу, отличному от URL-адреса, для которого POST был изменен. Вы должны иметь возможность использовать обычные заголовки кэширования для этой страницы (результатов поиска), в зависимости от того, насколько изменчивыми будут ваши результаты поиска.

2 голосов
/ 18 июля 2009

В соответствии с RFC2616 «POST» не является идемпотентным методом, что означает, что браузер не будет повторно отправлять запрос, пока пользователь не подтвердит его повторную отправку. Таким образом, чтобы предотвратить запрос, вы должны убедиться, что клиент кэширует страницу.

Для этого используйте заголовок Cache Control: http://www.fiddler2.com/redir/?id=httpperf и убедитесь, что вы не отправляете обратно какие-либо заголовки Vary или Pragma: no-cache: http://blogs.msdn.com/ieinternals/archive/2009/06/17/9769915.aspx

Было бы полезно, чтобы вы захватили заголовки ответов HTTP POST (например, с помощью Fiddler) и обновили свой вопрос ими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...