Pocket IE: кажется, все еще кешируется? - PullRequest
2 голосов
/ 30 июля 2009

У меня проблемы с конкретной версией Pocket IE, работающей под Windows Mobile 5.0. К сожалению, я не уверен в точных номерах версий.

У нас была проблема, из-за которой эта конкретная «установка» возвращала локально кэшированную версию страницы, когда беспроводная сеть была отключена. Справедливо, без проблем. Мы очистили кеш контроллера и начали отправлять следующие заголовки:

Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Last-Modified: Thu, 30 Jul 2009 16:42:08 GMT

Заголовок Last-Modified рассчитывается на лету и устанавливается на «сейчас».

Даже несмотря на это, контроллер, похоже, кэширует эти страницы: страница отправляется с заголовками, но затем, когда они отключают беспроводную сеть и щелкают ссылку на страницу (которая не должна была кэшироваться), она все равно возвращает это кэшированный файл.

Есть ли другие заголовки, которые нужно отправить, или это просто проблема с Pocket IE? Или это может быть что-то совершенно другое?

Спасибо!

Ответы [ 2 ]

1 голос
/ 30 июля 2009

Я не уверен, что смогу ответить на ваш вопрос, поскольку у меня нет Pocket IE для тестирования, но, возможно, я могу предложить что-то, что может помочь.

Это очень хорошая ссылка на кеширование: http://www.mnot.net/cache_docs/

Кроме того, я не уверен, является ли ваш пример вставленным результатами ваших заголовков или кодом, который вы настроили для отправки заголовков, но я считаю, что коллекция заголовков в большинстве языковые реализации (и, как я предполагаю, большинство реализаций браузера) рассматриваются как карта; поэтому, возможно, вы переписали «no-store, no-cache, must-revalidate» вторым заголовком «Cache-Control». Другими словами, только один может быть отправлен, и если последний выиграл, вы отправили только «post-check = 0, pre-check = 0».

Вы также можете попробовать добавить заголовок max-age = 0.

По моему опыту, и Firefox, и IE казались более чувствительными к страницам, обслуживаемым HTTPS. Вы можете попробовать это, если у вас есть в качестве опции.

Если вам все еще не повезло, и Pocket IE ведет себя совершенно иначе, чем Windows IE, то я предполагаю, что на контроллере есть специальные правила для кэширования, основанные на предположении, что он часто не подключен к Интернету.

Edit: После того, как вы упомянули CNN.com, я понял, что у вас нет «частного» заголовка в Cache-Control. Я думаю, это то, что заставляет CNN.com кэшировать страницу, а не вашу. Я считаю, что «private» - это наиболее строгая настройка, доступная в заголовке «Cache-Control». Попробуйте добавить это.

Например, вот заголовки CNN. (Я не думаю, что перечисление "private" дважды имеет какой-либо эффект)

Date: Fri, 31 Jul 2009 16:05:42 GMT
Server: Apache
Accept-Ranges: bytes
Cache-Control: max-age=60, private, private
Expires: Fri, 31 Jul 2009 16:06:41 GMT
Content-Type: text/html
Vary: User-Agent,Accept-Encoding
Content-Encoding: gzip
Content-Length: 21221

200 OK

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

0 голосов
/ 03 августа 2009

Хотя «Ренесис» был удивительным, пытаясь помочь мне здесь, мне пришлось сдаться.

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

Я закончил тем, что написал PHP-функцию, которая будет брать URL и, по сути, сделает его уникальным. Это делается путем добавления случайного параметра GET на основе вызова uniqid (). Затем я делаю с ним пару других мелочей: обязательно добавлю «?» или '&' к URL-адресу, основываясь на существовании других параметров GET, и убедитесь, что любые элементы привязки '#' помещены прямо до конца, а затем я возвращаю этот URL-адрес в браузер.

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

хак? Да. За работой? Пока все хорошо.

...