Динамические теги <img> без необходимости перезагружают статические изображения
Я уже задавал этот вопрос в теге , не учитывая максимальный возраст и ненужную перезагрузку изображений, и думал, что комментарии дают удовлетворительный ответ, но оказывается, что я ошибся. С тех пор, как прошло шесть месяцев, я думаю, что придумал решение, но хочу проверить его здесь, прежде чем внедрять. Это будет работать? Стоит ли реализовывать? Любое более простое решение? и т.п.
Чтобы кратко описать проблему, у меня есть программа cgi, которая генерирует gif-изображения для HTML-страниц с тегами, подобными приведенным ниже.
<img src="http://example.com/cgi-bin/gifprogram.cgi?query_string">
? Query_string указывает изображение, которое будет сгенерировано, и как только программа его сгенерирует, изображение кэшируется в cachedirectory / filename.gif с именем файла, выбранным в качестве md5-хеша ? Query_string. Затем последующие теги, вызывающие одно и то же изображение, просто получают тот же кешированный файл.
Таким образом, браузеры могут использовать свой собственный кэш, но обрабатывать тег как динамический и повторно загружать одни и те же, часто большие, изображения снова и снова, каждый раз, когда они видят тег, независимо от максимального возраста или любого другого http- Информация заголовка (что я мог подумать, чтобы попробовать). Хорошо, я понимаю, почему "динамический" необходим для фактически динамических приложений cgi. Но должен быть способ сказать браузеру "статический". Кажется, нет никакого стандартного способа, так что вот мой клудж...
На стороне сервера я собираюсь написать короткую программу cgi под названием checkcache.cgi? выражение, которое проверяет каталог кэша на наличие имени файла md5hash(выражение), т. е. проверяет, кэшировано ли уже желаемое изображение. И его вывод в stdout будет обычным http-заголовком, заканчивающимся текстом / текстом, за которым следует либо полный путь /filename.ext к кешированному файлу, соответствующему выражению, либо "not found", если нужное изображение еще не существует,
На стороне клиента вместо прямой записи тегов я напишу скрипт php, который принимает желаемое выражение и выполняет следующие действия. Во-первых, он использует curl для curl_exec() checkcache.cgi. Затем, если кэшированный файл уже существует, он отображает статический тег
с src = "http: //etc/filename.gif", используя имя файла, возвращаемое checkcache. Но если checkcache возвращает "not found", то это динамический тег для динамического запуска gifprogram.cgi.
Так как checkcache испускает всего несколько десятков байтов (а не некоторые из этих GIF-файлов, которые иногда могут запускать половину МБ или более), он должен работать очень быстро. Итак, мой вопрос еще раз - вышеуказанная стратегия будет работать, верно? Или что с этим не так? Или вы можете предложить более простую идею? Благодарю.
-------------------------------------------------- ---------------
Редактировать обновление: Да, это работает. В заключение. Просто ужасно продуманный способ выполнения того, что я думаю, должно быть простой задачей. И мне все равно было бы интересно узнать более простую процедуру.