Что я должен сделать, чтобы содержимое, такое как изображения, передаваемые по HTTPS, кэшировалось на стороне клиента? - PullRequest
6 голосов
/ 16 сентября 2008

Я использую Tomcat в качестве сервера и Internet Explorer 6 в качестве браузера. Веб-страница в нашем приложении имеет около 75 изображений. Мы используем SSL. Кажется, очень медленно загружается весь контент. Как я могу настроить Tomcat, чтобы IE кэшировал изображения?

Ответы [ 7 ]

10 голосов
/ 17 сентября 2008

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

Контент, доставляемый по защищенному каналу, по умолчанию не записывается на диск и поэтому хранится в кеше памяти браузеров, который намного меньше, чем в кеше на диске. Этот кеш также исчезает при выходе из приложения.

Сказав все это, есть вещи, которые вы можете сделать, чтобы улучшить кэшируемость для активов SSL внутри единой настройки браузера. Для начала убедитесь, что все ваши активы имеют разумные заголовки Expires и Cache-Control. Если tomcat находится за Apache, используйте mod_expires, чтобы добавить их. Это избавит браузер от необходимости проверять, не изменилось ли изображение между страницами

<Location /images>
   FileEtag none
   ExpiresActive on
   ExpiresDefault "access plus 1 month"
</Location>

Во-вторых, и это характерно для MSIE и Apache, большинство конфигов apache ssl включают эти строки

SetEnvIf User-Agent ".*MSIE.*" \
     nokeepalive ssl-unclean-shutdown \
     downgrade-1.0 force-response-1.0

Что отключает поддержку активности для ВСЕХ агентов MSIE. ИМХО, это слишком консервативно, последними браузерами MSIE, в которых возникли проблемы с использованием SSL, были 5.x и непатентованные версии 6.0 до SP2, которые сейчас очень редки. Следующее является более мягким и не отключит keepalive при использовании MSIE и SSL

BrowserMatch "MSIE [1-4]" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [5-9]" ssl-unclean-shutdown
5 голосов
/ 17 сентября 2008

Некоторые браузеры кешируют содержимое SSL. Firefox 2.0+ по умолчанию не кэширует ресурсы SSL на диске (для повышения конфиденциальности). Firefox 3+ не кэширует их на диске, пока не появится заголовок Cache-control: public.

Итак, правильно установите заголовок Expires: и Cache-control: public. например,

<Files ~ "\.(gif|jpe?g|png|ico|css|js|cab|jar|swf)$">
        # Expire these things
        # Three days after access time
        ExpiresDefault  "now plus 3 days"
        # This makes Firefox 3 cache images over SSL
        Header set Cache-Control public
</Files>
4 голосов
/ 08 апреля 2009

Если большинство из этих 75 изображений являются значками или изображениями, которые появляются на каждой странице, вы можете использовать CSS-спрайты, чтобы значительно сократить количество HTTP-запросов и, следовательно, быстрее загрузить страницу:

http://www.alistapart.com/articles/sprites/

2 голосов
/ 16 сентября 2008

75 изображений звучит как много. Если много маленьких изображений, есть способы объединить много изображений в одно, вы можете увидеть, можете ли вы найти библиотеку, которая делает это. Также вы, вероятно, можете принудительно кэшировать изображения в виде:

0 голосов
/ 17 сентября 2008

Может быть, вы можете добавить дополнительный сервер / поддомен, который предоставляет изображения без https?

0 голосов
/ 16 сентября 2008

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

0 голосов
/ 16 сентября 2008

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

Обычно изображения на вашем веб-сайте не очень чувствительны и по этой причине обслуживаются через HTTP.

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