Кэширование изображений с разными строками запроса (S3 со знаком URL) - PullRequest
8 голосов
/ 12 июня 2010

Я пытаюсь выяснить, могу ли я заставить браузеры кэшировать изображения с подписанными URL-адресами.

Я хочу создать новый подписанный URL-адрес для каждого запроса (то же изображение, но с обновленной подписью).), но браузер не должен повторно загружать его каждый раз.

Итак, при условии, что заголовки, связанные с кэшем, установлены правильно, и все URL-адреса одинаковы, за исключением строки запроса, есть ли способчтобы браузер кешировал его?

URL-адреса будут выглядеть примерно так:

http://example.s3.amazonaws.com/magic.jpg?WSAccessKeyId=stuff&Signature=stuff&Expires=1276297463
http://example.s3.amazonaws.com/magic.jpg?WSAccessKeyId=stuff&Signature=stuff&Expires=1276297500

Мы планируем установить e-tag как md5sum, так что он хотя бы выяснит, что этото же самое изображение в этот момент?

Мой другой вариант - отслеживать, когда последний раз выдавал URL, а затем начать выдавать новые, прежде чем истечет срок действия старых, но я бы предпочел не иметь дела сИнформация о сеансе.

Ответы [ 3 ]

4 голосов
/ 04 июня 2014

У меня точно такая же проблема с подписанными URL-адресами S3. Единственное решение, которое я придумал, - это истечение срока действия URL в тот же день. Это не идеально, но, по крайней мере, на некоторое время обеспечит кэширование.

Например, для всех URL-адресов, подписанных в апреле, срок действия истекает 10 мая. Срок действия всех URL-адресов, подписанных в июне, истекает 10 июля. Это означает, что подписанные URL-адреса будут идентичны в течение всего месяца.

4 голосов
/ 16 июня 2010

Браузер будет использовать весь URL для кэширования, включая параметры запроса.Таким образом, если вы измените параметр запроса, он фактически станет новым «ключом» в кэше и всегда будет загружать новую копию этого изображения.Это популярный метод в мире обслуживания рекламы - вы добавляете случайное число (или текущую временную метку) в конец URL-адреса в качестве параметра, чтобы браузер всегда возвращался на сервер, чтобы сделать новый запрос.

Единственный способ заставить это работать - если вы можете сделать URL-адрес статичным, то есть с помощью правил переписывания Apache или какого-либо прокси-сервера.

1 голос
/ 14 июня 2016

Просто наткнулся на эту проблему и нашел способ ее решить.Вот что вам нужно сделать:

  1. Сохранить первую строку URL (например, в localStorage);
  2. Когда вы получите img url в следующий раз, просто проверьте, совпадают ли их основные URL (str1.split('?')[0] === str2.split('?')[0])
  3. Если они это сделают, используйте первый как атрибут img src.

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...