Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2015, 18:20   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Запрет кеширование конкретных файлов браузером

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

Сейчас простой способ просто подставляю к пути рандомные циферки.

Но в таком случае кеш браузера будет постоянно забиваться картинками с этими рандомными циферками и что будет когда они достигнут некоторой величины по суммарному размеру для 1го сайта.
Вроде бы у каждого браузера есть определенный лимит для каждого сайта на кеш их данных. Т.о. получится что будут вытеснятся кеш данных, коротые действительно должны быть в кеше.

Короче, если изложенное выше правда, то интересует способ запрета кеширования в браузере определенных файлов желательно, если есть способ через php, крайний случай через nginx.

Например в nginx что то типо такого есть:
Код:
location ~* ^.+\.(php|phtml|shtml|html|xml|htm)$ {
    expires   0;
    header set Cache-Control "no-store, no-cache, must-revalidate, private";
    header set Pragma no-cache;
}
Это просто пример, у меня на сервере другое.

Наверно тут можно пошаманить, чтобы исключить из кеширование на стороне браузера определенных файлов?

Последний раз редактировалось Illusiony; 19.09.2015 в 18:22.
Illusiony вне форума Ответить с цитированием
Старый 19.09.2015, 19:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Т.о. получится что будут вытеснятся кеш данных, коротые действительно должны быть в кеше.
Откуда такие сведенья?

Я у себя на страницах пишу такое:
Код:
<meta http-equiv="Cache-Control" content="no-cache" />
По идее не кешируется, но я не проверял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.09.2015, 22:57   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Ну так да вы отключили кэширование всего.
А мне нужно отключить кэширование только конкретных файлов.
На счет :
Код:
Т.о. получится что будут вытеснятся кеш данных, коротые действительно должны быть в кеше.
Я имею ввиду что при существующей реализации в какой то момент весь кэш заполниться изображениями с путями вида URL?xxxxx и как я написал по идеи будут вытеснены другие файлы в кэше. Так как время жизни в nginx для файлов такого типа у меня велико.
Illusiony вне форума Ответить с цитированием
Старый 20.09.2015, 20:35   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Можно отдавать картинки средствами PHP, добавляя заголовки, исключающие кэширование:
PHP код:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); //Дата в прошлом 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Pragma: no-cache"); // HTTP/1.1 
header("Last-Modified: " gmdate("D, d M Y H:i:s") . "GMT"); 
Andkorol вне форума Ответить с цитированием
Старый 23.09.2015, 12:32   #5
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Но, я так понимаю будут все картинки не кэшироваться, а мне нужно чтобы какие то кэшировались, а какие то нет.
Illusiony вне форума Ответить с цитированием
Старый 23.09.2015, 16:55   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Но, я так понимаю будут все картинки не кэшироваться, а мне нужно чтобы какие то кэшировались, а какие то нет.
Ё-моё...
Ну так и отдавай с такими заголовками средствами PHP только те картинки, которые не нужно кэшировать – а остальные отдавай напрямую, как обычно, и они будут нормально кэшироваться.
Очевидно же.
Andkorol вне форума Ответить с цитированием
Старый 23.09.2015, 18:41   #7
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Ё-моё...
Ну так и отдавай с такими заголовками средствами PHP только те картинки, которые не нужно кэшировать – а остальные отдавай напрямую, как обычно, и они будут нормально кэшироваться.
Очевидно же.
А что либо подобное можно сделать средствами js?

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

или вместо ссылки на картинку ( из js или html) делать ссылку на php скрипту, который и выдаст нужный рисунок с этими заголовками? ( я правда не знаю возможно ли такое)

Последний раз редактировалось Illusiony; 23.09.2015 в 19:49.
Illusiony вне форума Ответить с цитированием
Старый 23.09.2015, 20:37   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
или вместо ссылки на картинку ( из js или html) делать ссылку на php скрипту, который и выдаст нужный рисунок с этими заголовками? ( я правда не знаю возможно ли такое)
Это возможно – и именно об этом способе я и говорю:
PHP код:
<img src="/image.php?id=1234" /> 
image.php возвращает изображение с указанным id (вместо id можно указывать адрес, имя картинки и т.д.). С заголовками, исключающими кеширование.
Andkorol вне форума Ответить с цитированием
Старый 23.09.2015, 23:18   #9
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

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

В данный момент это не проблема, но все таки в будущем это может быть стать проблемой ( при очень высокой нагрузке).

В любом случае я очень благодарен за ваше внимание.
Illusiony вне форума Ответить с цитированием
Старый 27.09.2015, 18:56   #10
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Делаю так:

Код:
$('#img').attr('src','http://hspick.ru/memory_cards_server/HScontrolOne_img/screen.php');
В screen.php:
Код:
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); //Дата в прошлом  
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1  
header("Pragma: no-cache"); // HTTP/1.1  
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
echo " <img src='illusion_HScontrolOne.jpg'/>";  
	
?>
При этом если отдельно в браузере набрать URL http://hspick.ru/memory_cards_server...img/screen.php отображается

А в на страничке тестовой эта картинка должна перезагружаться каждую секунду. Запрос идет к скрипту но ничего не выводится. Я не знаю как правильно, но может быть раз заголовки как бы не в начале страницы( потому что вызываются после по таймеру) тестовой то и поэтому неправильно работает.
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет на сохранение и закрытие производных файлов Salta-301 Microsoft Office Excel 0 10.04.2015 11:36
Запрет на скачивания торрет файлов serres Безопасность, Шифрование 1 16.11.2010 15:48