3

I know CDNs like Cloudflare save bandwidth by caching static files as images, JS, and CSS files.

I have a script that generates images on the fly and its location looks something like this:

http://domain.com/image.php?id=1

With id being the image id. Cloudflare won't cache these images due to the dynamic URL. If I add a mod rewrite rule to rewrite the URL to become something like:

http://domain.com/images/1

or

http://domain.com/images/1.jpg

Will CloudFlare cache the images in this case or the images have to actually be real files that reside in directories?

Michael Samuel
  • 175
  • 1
  • 7

2 Answers2

4

The easiest way to Cache Everything on a given endpoint in CloudFlare is to use a Cache Everything Page Rule, an asterisk will match a wildcard result. So in your first example we can do the following:

CloudFlare Cache Everything on endpoint

Cache Everything can only be enabled using a Page Rule, so they above example will best in the vast majority of cases, but it is also possible to set a general rule in CloudFlare as to how query strings are dealt with.

You can do this globally in the "Caching" tab of your CloudFlare dashboard, by default the Standard option will cache the resource as varied by the query string.

Set Caching Level in CloudFlare

mjsa
  • 385
  • 2
  • 5
  • As an alternative, if for some bizarre reason this doesn't work, one could cache the resulting images and serve them. Not pretty, but better than re-re-re-re-...-generating the same image from the same parameters. – Ismael Miguel Jul 25 '16 at 16:09
3

I will start from the end of your question and dig my way up. So first of all, there is no way for proxy (Cloudflare acts like one) to distinguish between static content and the one generated on fly, the responses are virtually identical. The only difference could be extension of the requested file and according cache rule send by your server. The Cloudflare by default caches only files with certain extensions.

That being said, yes both your examples will be cached by Cloudflare (unless the Cache-Control header is set to "private", "no-store", "no-cache", or "max-age=0", or if there is a cookie in the response).

The other thing is that by default, Cloudflare caches even request with query strings. It delivers a different resource each time the query string changes. There is no problem in using query strings as long as the extension is correct or page rule explicitly specifies it to cache regardless of extension.

  • For your last paragraph, it appears CloudFlare's free plan will indeed not cache images with a `.php` extension. See https://support.cloudflare.com/hc/en-us/articles/200172516-Which-file-extensions-does-CloudFlare-cache-for-static-content- – ceejayoz Jul 25 '16 at 13:33