Я знаю, что CDN, такие как Cloudflare, экономят пропускную способность, кэшируя статические файлы в виде изображений, файлов JS и CSS.
У меня есть скрипт, который генерирует изображения на лету, и его расположение выглядит примерно так:
http://domain.com/image.php?id=1
С участием id
являющийся идентификатором изображения. Cloudflare не кэширует эти изображения из-за динамического URL. Если я добавлю правило перезаписи мода, чтобы URL-адрес стал примерно таким:
http://domain.com/images/1
или
http://domain.com/images/1.jpg
Будет ли CloudFlare кэшировать изображения в этом случае или изображения должны быть настоящими файлами, которые находятся в каталогах?
Самый простой способ кэшировать все на заданной конечной точке в CloudFlare - использовать Правило страницы "Кэшировать все", звездочка будет соответствовать результату с подстановочным знаком. Итак, в вашем первом примере мы можем сделать следующее:
Cache Everything можно включить только с помощью правила страницы, поэтому приведенный выше пример лучше всего подходит в подавляющем большинстве случаев, но также можно установить общее правило в CloudFlare относительно того, как обрабатываются строки запроса.
Вы можете сделать это глобально на вкладке «Кэширование» панели управления CloudFlare, по умолчанию параметр «Стандартный» будет кэшировать ресурс в зависимости от строки запроса.
Я начну с конца вашего вопроса и раскопаю свой путь вверх. Итак, во-первых, прокси-сервер (Cloudflare действует как один) не может различать статический контент и тот, который создается на лету, ответы практически идентичны. Единственная разница может заключаться в расширении запрошенного файла и в соответствии с правилом кеширования, отправленным вашим сервером. Cloudflare по умолчанию кэширует только файлы с определенные расширения.
При этом да, оба ваших примера будут кэшированы Cloudflare (если только для заголовка Cache-Control установлено значение «private», «no-store», «no-cache» или «max-age = 0», или если в ответе есть cookie).
Другое дело, что по умолчанию Cloudflare кеширует даже запрос с строки запроса. Он предоставляет разные ресурсы каждый раз, когда изменяется строка запроса. Нет проблем с использованием строк запроса, если расширение правильное или правило страницы явно указывает его для кеширования независимо от расширения.