Quoi de neuf dans le monde du cache HTTP

What's new in the HTTP cache world

What's new in the HTTP cache world

Sylvain Combraque

Creator of Souin HTTP cache

Træfik helper/ambassador

Cache-handler maintainer 

Open-source contributor

@Darkweak

@Darkweak_dev

Disclaimer

✊ Tech is political

💬 Ask during the conference

Join onestlatech in 🇫🇷

The chaos between the providers

HTTP/1.0

📉 low description

📉 low customization

😮‍💨 lot of own implementations

June 1999

RFC-2616

HTTP/1.1

The WWW beginnings

📚 Grammar

🕵️‍♂️ Resource identifier

🔗 URI

🔤 Content-Encoding

RFC-2616

13.x: Caching in HTTP

Caching would be useless if it did not significantly improve performance

RFC-2616

13.x: Caching in HTTP

If a stored response is not "fresh enough" [...] the cache MAY still return the response with the appropriate Warning header

RFC-2616

Cache-Control commons

🙅‍♂️ no-cache

✋ no-store

⏱️ max-age

🫡 no-transform

RFC-2616

Cache-Control HTTP request

⏱️ max-stale

🤷‍♂️ min-fresh

💁‍♂️ only-if-cached

RFC-2616

🔓 public

🔐 private

🤙 must-revalidate

🤙 proxy-revalidate

⏱️ s-maxage

Cache-Control HTTP response

RFC-2616

  • community="UCI"

  • only-if-my-case-match="that-should"

Cache-Control cache-extension

August 2001

ESI Language

ESI tags

ESI tags

<esi:include 
  src="http://example.com/1.html" 
  alt="http://bak.example.com/2.html" 
  onerror="continue"
/>

ESI tags

<esi:try> 
  <esi:attempt>
    <esi:comment text="Include an ad"/> 
    <esi:include src="http://www.example.com/ad1.html"/> 
  </esi:attempt>
  <esi:except> 
    <esi:comment text="Just write some HTML instead"/> 
    <a href=www.akamai.com>www.example.com</a>
  </esi:except> 
</esi:try>

ESI tags

<esi:vars>
  <img 
    src="http://www.example.com/$(HTTP_COOKIE{type})/hello.gif"
    alt="$(HTTP_COOKIE{logo_name})"
  />
</esi:vars>

ESI tags

<img 
  src="http://www.example.com/human/hello.gif"
  alt="My human GIF"
/>

ESI tags

ESI tags

June 2014

RFC-7234

HTTP/1.1 Caching

RFC-7234

HTTP response header Age

Age: 10
Age: -5

RFC-7234

Invalidation

RFC-7234

Cache-Control HTTP response

🤘 stale-while-revalidate

2015

HTTP/2

🏎💨

HTTP/2

HTTP/2

HTTP/2

June 2022

RFC-9211 & RFC-9213

The Cache-Status & Target-Cache-Control
HTTP response Header fields

RFC-9211

Cache-Status directives

💥 hit

📩 fwd

ℹ️ fwd-status

⏱️ ttl

👌 stored

🙏 collapsed

🔑 key

🤓 detail

RFC-9211

Cache-Status directives

Cache-Status: Your-Cache-Server; hit; ttl=3; key=your-pattern
Cache-Status: Your-Cache-Server; fwd=uri-miss; fwd-status=304
Cache-Status: Your-Cache-Server; fwd=uri-miss; detail=STORAGE-UNREACHABLE

RFC-9213

Target-Cache-Control

CDN

Varnish

Caddy 

Upstream

RFC-9213

Target-Cache-Control

CDN

Varnish

Caddy 

Upstream

RFC-9213

Target-Cache-Control

CDN

Varnish

Caddy 

Upstream

Cache-Control: no-store
CDN-Cache-Control: public, max-age=120, s-maxage=120
Varnish-Cache-Control: public, max-age=360, s-maxage=360
Caddy-Cache-Control: public, max-age=3600, s-maxage=3600

RFC-9213

Target-Cache-Control

CDN

Varnish

Caddy 

Upstream

Cache-Control: no-store
CDN-Cache-Control: public, max-age=120, s-maxage=120
Varnish-Cache-Control: public, max-age=360, s-maxage=360
Caddy-Cache-Control: public, max-age=3600, s-maxage=3600

3600s

RFC-9213

Target-Cache-Control

CDN

Varnish

Caddy 

Upstream

Cache-Control: no-store
CDN-Cache-Control: public, max-age=120, s-maxage=120
Varnish-Cache-Control: public, max-age=360, s-maxage=360
Caddy-Cache-Control: public, max-age=3600, s-maxage=3600

360s

RFC-9213

Target-Cache-Control

CDN

Varnish

Caddy 

Upstream

Cache-Control: no-store
CDN-Cache-Control: public, max-age=120, s-maxage=120
Varnish-Cache-Control: public, max-age=360, s-maxage=360
Caddy-Cache-Control: public, max-age=3600, s-maxage=3600

120s

RFC-9213

Target-Cache-Control

Cache-Control: no-store
CDN-Cache-Control: public, max-age=120, s-maxage=120
Varnish-Cache-Control: public, max-age=360, s-maxage=360
Caddy-Cache-Control: public, max-age=3600, s-maxage=3600

Client

no-cache

What about the future...

Probably in June

Surrogate-keys

First group

Second group

Third group

key 1

key 3

key 564

key 90

key ABC

key 3

key 789

key 1

key 789

Surrogate-keys

So much implementation

Prepare an RFC to make it standard

Resources

Resources

https://github.com/http-tests/cache-tests

https://cache-tests.fyi

Resources

https://www.rfc-editor.org

👇That's the French paracetamol👇

Lazy to manage an HTTP cache?

Thank you for your attention

Give your feedbacks👉

Quoi de neuf dans le monde du cache HTTP

By darkweak

Quoi de neuf dans le monde du cache HTTP

  • 161