У меня есть репозиторий clickonce, размещенный на сервере Apache; по очевидным причинам * я не хочу, чтобы этот репозиторий кэшировался прокси-сервером.
Я знаю, что нет способа предотвратить кэширование прокси-сервером чего-либо, если он этого хочет, но я ищу способ либо намекнуть прокси-серверу не кэшировать мой URL-адрес, либо указать ему «дату устаревания».
Есть ли способ сделать это с помощью Apache? Если нет, можно ли это сделать с другим веб-сервером (IIS?)
Если есть варианты, работающие только с некоторыми конкретными поставщиками прокси, они меня тоже интересуют.
** Если репозиторий кэширован, программное обеспечение проверяет его версию по устаревшей копии «последней версии» (хранимой прокси-сервером) вместо того, чтобы проверять себя по «реальной» последней версии, которая находится на моем сервере.
Это довольно просто сделать с помощью apache, например, чтобы ничего не исходило с вашего сервера. Когда-либо быть в кэше, попробуйте это
<Location / >
ExpiresActive On
ExpiresDefault "now"
</Location>
Вы, вероятно, не захотите делать это именно так, поэтому посмотрите на документация для mod_expires и настройте это под свои нужды.
Также помните, что в этом сценарии браузер и прокси-сервер обрабатываются одинаково. Отправляя заголовки с истекшим сроком действия с вашими ответами, которые отключают кеширование, вы значительно увеличиваете нагрузку и стоимость работы вашего сайта, не говоря уже о замедлении доступа ваших посетителей.
Если вы говорите о каком-то Cache Engine, таком как WAN Accelerator, и рассматриваемое устройство присоединяет к запросу особый UserAgent, то вам повезло. В этом случае у вас могут быть такие правила, как следующие, где SomeString
- это строка, которая будет соответствовать пользовательскому агенту механизма кэширования:
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 секунды, например, а без кеша, нет магазина, и необходимо перевалидировать заголовки, для хорошей меры, потому что есть некоторые неправильно работающие / глючные прокси, и таким образом вы обязательно охватите все базы.
С Apache вам захочется изучить mod_expires. Большинство прокси уважают HTTP-заголовок Expires вместе с максимальным возрастом и т. Д.