Does Akamai pull from origin when query string parameters change for cached assets
Asked Answered
F

3

11

So, I want to add versioning to my css and js files. The way I would like to do this is by appending a query string to the end of the asset path so

/foo/bar/baz.css

Becomes

/foo/bar/baz.css?version=1

This will work for proxies and browser cache, however, I was wondering if Akamai will know this is a new file and re-request it from the origin server? My assumption would be that it would re-request the file from the origin server but figured I'd ask if anyone knew for sure.

Faustino answered 23/3, 2011 at 20:36 Comment(0)
V
5

Yes. It matches exact URLs for all GET requests.

Voguish answered 23/3, 2011 at 20:38 Comment(1)
As an interesting aside, a recent paper (see also: article in IEEE Spectrum) showed that many CDN's default handling of query strings can be used for DOS attacks against origin servers.Margaretmargareta
F
4

Not quite. It depends on the CDN configuration. Query String values are usually not part of the cache-key. So, when setting up the CDN delivery config, make sure you explicitly add the option to include the Query String as part of the cache-key. Otherwise, you will end up serving inconsistent versions due to having a cache key that does not vary based on the query string value, in this case, the asset version.

Foramen answered 13/5, 2014 at 21:56 Comment(1)
I'm looking for a reference for what is "usually" part of the query string for CDNs. There seem to be no rules. I noticed that browser caches always considers the whole URL (excluding fragment) in the request as a strict standard, but CDNs in general seem to not.Demission
M
0

I prefer to have a url like '/css/DEVELOPER_BASE/foo/baz/style.css'.

Your build/deploy scripts do a global find and replace on '/css/DEVELOPER_BASE/' with '/css/[version_number]/'

To make this work you then have two options.

  1. Your deploy script copies the css files from '/css/DEVELOPER_BASE/' to '/css/[version_number]/'
  2. Your web server does an alias (not redirect) for '/css/[version_number]/' to '/css/DEVELOPER_BASE/'

This will keep you from having to worry about how browsers and CDN's handle query parameters.

Myocardium answered 24/10, 2017 at 12:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.