В нашем проекте мы решили использовать предварительно подписанные URL-адреса в качестве основного механизма аутентификации.
Урезанная наша установка включает в себя
- сервер хранения
- API-сервер
- клиент (угловой SPA, работающий в браузере)
Мы используем предварительно подписанные URL-адреса для загрузки и скачивания файлов с клиента непосредственно на сервер хранения.
Процесс загрузки (упрощенный):
- клиент отправляет API: эй, я хочу загрузить это
- API выполняет авторизацию и проверку, выполняет некоторые действия с базой данных и возвращает предварительно подписанный URL-адрес.
- клиент загружает напрямую на сервер хранения
Все идет нормально. Большой проблемой является поток «загрузки».
- клиент спрашивает апи: эй, покажи мне список того, что у тебя есть
- API выполняет авторизацию, проверку и возвращает список объектов json, которые также содержат предварительно подписанные URL-адреса получения для отображения файлов (изображений).
- клиент отображает список данных объекта и встраивает изображения, загруженные непосредственно с сервера хранения, используя заранее заданные URL-адреса
Это прекрасно работает, но увеличивает кеш браузера до нескольких ГБ ОЗУ.
Это происходит из-за того, что предварительно подписанные URL-адреса, сгенерированные для нескольких вызовов, не совпадают и различаются в части авторизации (например, удержание нового нового времени жизни) для каждого запроса. Когда пользователь щелкает вперед и назад по разбивке на страницы, клиент получает разные URL-адреса, и кеш браузера обрабатывает их как разные изображения.
Пока это кажется правильным поведением на стороне браузера (другой URL-адрес равен другому изображению).
Пока это кажется правильным поведением на стороне API (новый вызов вернет новое время жизни).
Есть ли какие-либо предполагаемые способы, как справиться с этим?
Сами потоки неверны?
Любые способы решить эту проблему, кроме реализации централизованного предварительно подписанного кэша URL-адресов при запуске нескольких экземпляров API?
Может ли кто-нибудь также дать совет по значимым тегам, которые я мог бы использовать.