У меня есть клиент, у которого есть один из этих интернет-провайдеров, который реализует кеш для ускорения просмотра веб-страниц. Это заставило его не загружать последнюю версию EXE с нашего сервера NGINX после обновления этого EXE нашими разработчиками. Есть ли способ перехватить EXE-запросы от нашего NGINX и реализовать заголовок блокировки кеша?
NGINX версии 1.14.0
Ubuntu Server версии 18.04.2
Я вижу два возможных решения:
использование номеров версий в пути URL или имени файла EXE будет более надежным, чем заголовки элементов управления кешем, потому что кеш будет рассматривать новую версию как другой ресурс.
HTTP небезопасен, ваш клиент может быть уязвим для атак MITM, заменяющих вредоносное ПО. Использование HTTPS для обслуживания файлов блокирует большую часть кеширования и защищает от атак MITM.
Однако в тех случаях, когда клиент доверил третьей стороне кэшировать свой HTTPS-трафик (и установил для этого корневой сертификат третьей стороны), первое решение: использование уникального URL-адреса для каждой версии будет необходимо.
Проблема изменения URL-адреса загрузки может быть решена путем открытия страницы загрузки с помощью запроса HTTP POST, потому что ничто не кэширует ответы POST.
Нет никаких заголовков перебора кеша AFAIK.
Вы можете контролировать только время жизни кеша, и это, конечно, через Cache-Control
. Либо вы поручаете клиентам кэшировать ваши EXE-файлы на то или иное время, либо не кешировать вообще.
Не существует волшебного заголовка, который вы отправляете клиентам, которым уже было приказано кэшировать актив на определенное время, чтобы они перестали использовать кешированную версию. Они просто не будут консультироваться с вашим сервером если в настоящее время у них есть допустимая запись в кэше для этого ресурса.
Если вы не можете позволить себе изменять URL-адреса, что было бы стандартной практикой очистки кеша, ваш выбор: либо очень недолговечный кеш, либо его вообще нет:
location ~ \.exe {
expires -1;
}
Что приведет к Cache-Control: no-cache
.