# HTTP Header

Cache Header

{% embed url="<https://www.keycdn.com/blog/http-cache-headers>" %}

<https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers>

![](https://4116032991-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LgnugJ0SdX2tMAwP37V%2F-MEZUCV0Pn1qIEBQnDnc%2F-MEZfE9xCR2ysPIy1Ddn%2Fimage.png?alt=media\&token=33d57d52-10f7-4af8-827e-763892ce7dcc)

Caches work with content mainly through freshness and validation. A fresh representation is available instantly from a cache while a validated representation rarely sends the entire representation again if it hasn't changed. In cases where there is no validator present (e.g. `ETag` or `Last-Modified` header), and a lack of explicit freshness info, it will usually (but not always) be considered uncacheable. Let's shift our focus to the kind of headers you should be concerned about.

#### Extension `Cache-Control` directives[#](https://www.keycdn.com/blog/http-cache-headers#5-extension-cache-control-directives) <a href="#id-5-extension-cache-control-directives" id="id-5-extension-cache-control-directives"></a>

Apart from the well-known `Cache-Control` directives outlined in the first section of this article, there also exists other directives which can be used as extensions to `Cache-Control` resulting in a better user experience for your visitors.

```
Cache-Control: max-age=<seconds>
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-control: no-cache 
Cache-control: no-store
Cache-control: no-transform
Cache-control: only-if-cached
```

**immutable#**

No conditional revalidation will be triggered even if the user explicitly refreshes a page. The immutable directive tells the client that the response body will not change over time, therefore, there is no need to check for updates as long as it is unexpired.

**stale-while-revalidate#**

The `stale-while-revalidate` directive allows for a stale asset to be served while it is revalidated in the background.
