HTTP Caching¶
This specification defines the expected HTTP caching behavior for all wilco bridges and implementations. Implementations must follow the requirements marked with must, must not, should, and should not (per RFC 2119).
Overview¶
wilco serves several categories of content, each with different caching requirements. Aggressive caching of static assets is critical for performance — without it, every page navigation re-fetches JavaScript loaders and component bundles, causing visible “Loading component…” placeholders on each click.
Asset Categories¶
Component Bundles¶
URL pattern: /api/bundles/{name}.js
Component bundles must return:
Cache-Control: public, max-age=31536000, immutable
Bundles are content-addressed: the loader appends a hash query parameter
(e.g., ?v=abc123) for cache busting when content changes. This makes
immutable caching safe — a changed bundle gets a new URL.
Wilco Static Assets¶
URL pattern: /wilco-static/wilco/loader.js, /wilco-static/wilco/live-loader.js
Wilco static assets must return:
Cache-Control: public, max-age=31536000, immutable
These files are versioned with the wilco package itself. When the package is upgraded, the file content changes and the HTML references are updated by the new version, effectively busting the cache.
Application Static Assets¶
URL pattern: /static/ (CSS, fonts, favicon, etc.)
Application static assets should return appropriate cache headers with at least:
Cache-Control: public, max-age=3600
Implementations may use longer durations with cache-busting strategies (hashed filenames, query parameters).
Media Files¶
URL pattern: /media/ (user uploads, product images, etc.)
Media files should return:
Cache-Control: public, max-age=86400
or use ETag-based validation caching. Media content changes infrequently
but is not versioned, so a moderate max-age balances performance with
freshness.
HTML Pages¶
HTML pages must not be cached with long max-age values. They should
use no-cache or a short max-age to ensure the browser always receives
fresh content with up-to-date component references.
API Metadata¶
URL pattern: /api/bundles/{name}/metadata
API metadata responses should not be cached with long max-age values.
Component metadata may change during development as schemas evolve.
Summary Table¶
Asset Type |
Cache-Control |
Requirement Level |
|---|---|---|
Component bundles ( |
|
must |
Wilco static ( |
|
must |
App static (CSS, fonts) |
|
should |
Media files (images) |
|
should |
HTML pages |
|
must not cache long |
API metadata |
no long |
should not cache long |
Pre-built bundles (static) |
|
must |
Build manifest ( |
no long |
should not cache long |
Static Mode (Pre-built Bundles)¶
When components are pre-compiled with wilco build, bundles are served as
static files instead of through the API. This changes the URL pattern but not
the caching requirements:
URL pattern: /static/wilco/bundles/{name}.{hash}.js
Pre-built bundles must be served with:
Cache-Control: public, max-age=31536000, immutable
This is safe because filenames include a content hash. When a component changes, the build produces a new filename, effectively busting the cache.
Static file servers (WhiteNoise, nginx, CDN) should be configured to serve these files with immutable caching. WhiteNoise does this automatically for hashed filenames.
The manifest.json file should not be cached with long max-age
values, as it changes with each build.
Implementation Notes¶
The CACHE_CONTROL_IMMUTABLE constant is defined in
wilco.bridges.base and should be reused by all implementations
for component bundles and wilco static assets:
from wilco.bridges.base import CACHE_CONTROL_IMMUTABLE
# Value: "public, max-age=31536000, immutable"