What does `expires -1` mean in NGINX `location` directive?

25.5k views Asked by At

Given the sample location example below, what does -1 mean for expires? Does that mean "never expires" or "never caches"?

# cache.appcache, your document html and data
location ~* \.(?:manifest|appcache|html?|xml|json)$ {
  expires -1;
  access_log logs/static.log;
}

https://github.com/h5bp/server-configs-nginx/blob/b935688c2b/h5bp/location/expires.conf

3

There are 3 answers

0
Marki555 On BEST ANSWER

According to nginx manual, this directive adds the Expires and Cache-Control HTTP header to the response.

Value -1 means these headers are set as:

Expires: current time minus 1 second

Cache-Control: no-cache

So in summary it instructs the browser not to cache the document.

2
steve klein On

If expires -1 is used, it means that these pages are never cached. The expire directive instructs the browser to expire file cache after a certain amount of time (or at a certain time). If a negative value is given, there is no caching.

0
JohnLM On

Neither existing answer is strictly true. Setting expires: -1; does indeed make nginx add Cache-Control: no-cache HTTP header. This does not disable caching though. Instead, this makes any cached version "expire" immediately, requiring client (browser) to re-validate cache (if any) each time.

E.g., if client has cached version of resource, it is obligated to verify by doing a request to server, which can include If-None-Match and/or If-Modified-Since headers, in which case, server can reply with 304 Not Modified if the cached resource is still the latest.