⚫️ Тут имею в виду такую архитектуру 📱 => CDN без проверки прав доступа => серверы с проверкой прав доступа
И поэтому в каждой картинке добавлен уникальный секретный ключ, одноразовый в рамках сессии, и кеширование выключено
Интересный момент, почему кеширование может быть выключено даже при наличии секретного одноразового ключа в адресе картинки, который злоумышленник уже точно не сможет подобрать? Потому что у CDN есть лимит того, что он будет хранить на своих серверах в кеше, если ему надо хранить 1000 уникальных ресурсов, то это стоит 1000 условных монет, а если при каждом открытии доски добавляется уникальный access token, то надо хранить уже 1 миллион миллионов ресурсов, и это стоит кратно больше
Хорошо, что CDN-сервер может не кешировать на своей стороне ресурсы вообще, если указать заголовок, что кешировать надо только на клиенте, но не на промежуточных серверах. Для этого кеш должен быть private
https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control
Private cache
Cache that exists in the client. It is also called local cache or browser cache. It can store and reuse personalized content for a single user.
private
The private response directive indicates that the response can be stored only in a private cache (e.g. local caches in browsers).
Cache-Control: private
⚫️ если вы не знали про
Cache-Control: private, то эта директива может сэкономить на счетах за CDNНо чтобы продемонстрировать эффект от такой правки, нужен был тест. И для теста использовал связку 📱 => Proxyman со скриптом => miro.com, тест наглядно показывал, как включение кеширования ускоряет работу. В proxyman скрипты активириются через меню Scripting, для своего скрипта задал такие параметры
🟣 Name:
/api/v1/user-pictures🟣 URL:
https://miro.com/api/v1/user-pictures?*🟣 Method:
GET🟣 Use Wildcard
И в функции onResponse написал две строки на JavaScript (дата 01 May 2024 на тот момент была датой в будущем)
// Update or Add new headers
// response.headers["Content-Type"] = "application/json";
response.headers["Cache-Control"] = "private, max-age=31536000";
response.headers["Expires"] = "Wed, 01 May 2024 16:15:02 GMT";
Демонстрация была проведена. Совещания были назначены, созвоны созвонены, задачи поставлены, ... код написан, версия выпущена. Не за день, но все получилось. Получилась такая версия, которая при перезагрузке страницы загружала картинки из локального кеша, и это было на столько быстро, что они отображались почти мгновенно
⚫️ Тут надо помнить, что локальный кеш браузера тоже ограничен
📱 https://chromeenterprise.google/policies/#DiskCacheSize можно групповыми политиками увеличить этот параметр вот так
📱 или через ключ
--disk-cache-size=524000000 (по умолчанию 320 МБайт)📱А в FireFox это 1 ГБайт https://support.mozilla.org/en-US/questions/1272857#:%7E:text=Now%20look%20for%20%27%27%27browser,KB%2C%20before%20restarting%20Firefox%20again
📱 Для Edge тоже можно настроить https://www.thewindowsclub.com/change-microsoft-edge-cache-size-in-windows-10
Сообщил пользователю какую версию использовать, и что этот апдейт сделан специально, поблагодарил за обратную связь. Мне это так понравилось, что решил потом и разработчиков proxyman отблагодарить, оплатив лицензию на Pro версию. Фичи этой Pro версии не использовал, это было просто так. Всем рекомендую попробовать сделать customer based тест, это супер приятно и есть сильная мотивация сделать так, чтобы все получилось