Как я могу настроить apache так, чтобы он не позволял прокси-серверам кэшировать определенный URL на моем сайте?
У меня есть хранилище clickonce, размещенное на сервере Apache; по понятным причинам * я не хочу, чтобы этот репозиторий кэшировался прокси-сервером.
Я знаю, что нет способа помешать прокси-серверу кэшировать что-либо, если он этого хочет, но я ищу способ намекнуть прокси-серверу, чтобы он не кэшировал мой URL, или предоставить ему "дату устаревания".
Есть ли способ сделать это с Apache? Если нет, возможно ли это сделать с помощью другого веб-сервера (IIS?)
Если есть варианты, работающие только с некоторыми конкретными поставщиками прокси-серверов, я тоже заинтересован в них.
** Если хранилище кэшируется, программное обеспечение проверяет свою версию на соответствие устаревшей копии "последней версии" (удерживаемой прокси-сервером), а не проверяет себя на "реальной" последней версии, которая находится на моем сервере.
4 ответа
Это довольно легко сделать с помощью Apache, например, для конкретного, что ничто из вашего сервера никогда не должно кэшироваться, попробуйте это
<Location / >
ExpiresActive On
ExpiresDefault "now"
</Location>
Вы, вероятно, не хотите делать это точно, поэтому посмотрите документацию для mod_expires и настройте ее для своих нужд.
Также помните, что в этом сценарии браузер и прокси обрабатываются одинаково. Отправляя заголовки expires с вашими ответами, которые отключают кеширование, вы добавите значительную нагрузку и затраты на работу вашего сайта, не говоря уже о замедлении доступа ваших посетителей.
Если вы говорите о каком-либо Cache Engine, таком как WAN Accelerator, и рассматриваемое устройство присоединяет к запросу особый UserAgent, то вам повезло. В этом случае вы можете иметь правила, подобные следующим, где SomeString
это строка, которая будет соответствовать User Agent Cache Engine:
BrowserMatch SomeString no-cache-headers
Header set Cache-Control "no-cache, must-revalidate" env=no-cache-headers
Header set Pragma "no-cache" env=no-cache-headers
Header set Expires "Sat, 1 Jan 2000 00:00:00 GMT" env=no-cache-headers
Здесь я установил заголовок "Expires" на произвольную дату в прошлом.
Если вы говорите о прокси-сервере, который просто перенаправляет запрос и не выполняет запрос сам по себе, то самое большее, что вы можете сделать, это предотвратить все кэширование этих объектов или (немного лучше) установить короткое время жизни для этих объектов. объекты. Вы можете сделать это с чем-то вроде этого:
ExpiresActive On
ExpiresDefault "access plus 1 hour"
где вы можете выбрать время, которое вы хотите. Или вы можете просто предоставить "доступ" по умолчанию, что означает, что следующий запрос должен получить новый объект. Но здесь, как отмечают другие, вы также наказываете браузеры.
Вы можете либо установить метатег "Expires" на своих HTML-страницах, либо установить один / несколько заголовков через Apache/ любой другой сервер. Вот действительно хорошая информация по этому вопросу.
Вот как это сделать, используя ASP на IIS.
Используя заголовки, в основном вы можете установить максимальный возраст, например, на 1 сек, и заголовки no-cache, no-store и must-revalidate, если хотите, потому что есть некоторые некорректно работающие прокси, и таким образом вы убедитесь, что покрыли все базы.
С Apache вы захотите изучить mod_expires. Большинство прокси-серверов уважают HTTP-заголовок Expires вместе с max-age и т. Д.