{
  "product": "Specification (reference)",
  "title": "HTTP Caching",
  "summary": "Freshness, validation and invalidation between client, proxy and origin.",
  "category": "protocols",
  "entries": [
    {
      "path": [
        "Freshness",
        "Cache-Control directives on responses"
      ],
      "value": "max-age, s-maxage, no-store, no-cache",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "Freshness",
        "public versus private responses"
      ],
      "value": "",
      "status": "yes",
      "note": "shared caches must respect private"
    },
    {
      "path": [
        "Freshness",
        "Expires as a fallback"
      ],
      "value": "",
      "status": "yes",
      "note": "Cache-Control wins"
    },
    {
      "path": [
        "Freshness",
        "Heuristic freshness when nothing is declared"
      ],
      "value": "",
      "status": "yes",
      "note": "documented, bounded"
    },
    {
      "path": [
        "Validation",
        "ETag generation, strong and weak"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "Validation",
        "If-None-Match returning 304"
      ],
      "value": "",
      "status": "yes",
      "note": "no body on revalidation hit"
    },
    {
      "path": [
        "Validation",
        "Last-Modified and If-Modified-Since"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "Variation",
        "Vary header lists the request headers that matter"
      ],
      "value": "",
      "status": "yes",
      "note": "Accept-Encoding at minimum"
    },
    {
      "path": [
        "Variation",
        "Cache key includes method, URL and Vary dimensions"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "Staleness",
        "stale-while-revalidate"
      ],
      "value": "",
      "status": "yes",
      "note": "serve stale, refresh in the background"
    },
    {
      "path": [
        "Staleness",
        "stale-if-error"
      ],
      "value": "",
      "status": "yes",
      "note": "serve stale rather than fail"
    },
    {
      "path": [
        "Staleness",
        "must-revalidate for critical resources"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "Invalidation",
        "Unsafe methods invalidate the cached entry"
      ],
      "value": "",
      "status": "yes",
      "note": "POST/PUT/DELETE"
    },
    {
      "path": [
        "Invalidation",
        "Purge or surrogate-key API for the origin"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "Strategy",
        "Immutable assets served with a content hash in the URL"
      ],
      "value": "",
      "status": "yes",
      "note": "max-age=31536000, immutable"
    },
    {
      "path": [
        "Strategy",
        "HTML never cached long without validation"
      ],
      "value": "",
      "status": "yes",
      "note": "the deploy-visibility trap"
    }
  ]
}
