Проблема с кешем Google Chrome - PullRequest
4 голосов
/ 04 мая 2011

Я задавал этот вопрос раньше и не получил ответа, поэтому я добавляю больше информации.Я создал онлайн-сервис, который немного загружен на js с использованием Spring 3 MVC и Spring Security для аутентификации / авторизации.HTTPS является обязательным требованием для любого взаимодействия, поэтому оно включено для всех запросов.Настройка сервера состоит из одного сервера приложений Tomcat 7 (может добавить больше в будущем) за сервером Apache2, который действует как обратный прокси-сервер с mod_proxy, mod_cache и mod_deflate.Заголовки кэша установлены для всех кэшируемых ресурсов (js, css, images):

Cache-Control:max-age=604800, must-revalidate, public

Приведенный выше заголовок имеет желаемый результат как в браузерах Firefox, так и в браузерах IE (как минимум версии 3+ и 8+ соответственно).что я проверял), т.е. оба браузера кэшируют файлы .js и .css соответственно, если только пользователь не обновит страницу, поэтому браузер добавит к заголовку запроса Cache-Control:max-age=0 и получит ответ 304 или вызовет обновление с помощью Cache-Control:no-cache, так что он будет перезапускать ресурс.С другой стороны, Google Chrome ведет себя по-разному, хотя он кэширует файлы, которые привязывает их к конкретному сеансу, назначенному пользователю, добавляя jsessionid к ключу, который используется для хранения файлов в кеше.Это приводит к тому, что файлы повторно выбираются с сервера каждый раз, когда пользователь входит / выходит из системы или закрывает браузер (Spring security имеет временный идентификатор сеанса и другой, запомните меня).Основной CSS, который используется как для экрана входа в систему, так и для основного сайта, даже дважды выбирается, когда пользователь заходит на экран входа в систему и когда он перенаправляется на основной сайт после входа в систему (поскольку теперь Chrome вводит файл в кэш, который не имеетсессион привязан к нему).

Ответы [ 2 ]

5 голосов
/ 23 апреля 2012

В последнее время я снова столкнулся с этой проблемой и наконец выяснил причину, по которой Chrome отказывался кэшировать статические ресурсы, хотя заголовки были в порядке. Он не имеет никакого отношения к сеансу, вместо этого он не будет кэшировать какой-либо контент, если вы запрашиваете ресурсы по URL-адресу HTTPS, а сервер использует самозаверяющий сертификат, который вы не импортировали в хранилище доверенных сертификатов. У меня было

0 голосов
/ 04 мая 2011

Помогает ли пометка no-transform на конце?

Cache-Control:max-age=604800, must-revalidate, public, no-transform
...