Skip to main content

Module proxy_cache

Module proxy_cache 

Source
Expand description

Response caching (proxy-cache), ported from APISIX’s apisix/plugins/proxy-cache.

Serving a cached response means looking up the cache before the upstream call and storing the fresh response after it — two moments a single featherbit node cannot span. The behavior is expressed as a pair of nodes sharing one cache, linked by a required id:

  • a lookup node placed before upstream, which serves a cache hit straight to the client (short-circuiting the upstream call), and
  • a store node placed after upstream, which caches a fresh response for later hits.

Both nodes derive the cache key identically from the same cache_key template and the request, and share one namespace via id, so they always agree. State lives behind a crate::traffic::ResponseCache.

§Wiring

           ┌──────────────────┐        ┌──────────┐        ┌──────────────────┐
 listener →│ proxy-cache      │success →│ upstream │success →│ proxy-cache      │→ client
           │  (phase=lookup)  │        │          │        │  (phase=store)   │
           └──────────────────┘        └──────────┘        └──────────────────┘
                   │ hit                                      (caches responses
                   ▼                                        whose status is cacheable)
              client.in
        (cached response, HIT)

On a hit, the lookup node writes the cached response onto the context, adds featherbit-cache-status: HIT, and exits through the dedicated hit port — wired to client.in, delivering the cached response without touching the upstream. On a miss it passes through success; the store node then caches the upstream response and marks it featherbit-cache-status: MISS.

Structs§

ProxyCachePlugin
One node of a proxy-cache lookup/store pair.

Enums§

Role 🔒
Which half of the pair this node is.

Constants§

CACHE_STATUS_HEADER 🔒
Header written by both nodes to report the cache outcome.
HIDDEN_HEADERS 🔒
Response headers hidden from clients when hide_cache_headers is set.
SUPPORTED_POLICIES 🔒
The policy values this build actually supports — naming redis on a headless build would describe an option that cannot work.

Functions§

parse_statuses 🔒
Reads a Vec<u16> of HTTP statuses from a JSON array, if present and valid.