diff --git a/.changeset/increment-cache-response-age.md b/.changeset/increment-cache-response-age.md new file mode 100644 index 00000000000..3a9372cf44d --- /dev/null +++ b/.changeset/increment-cache-response-age.md @@ -0,0 +1,6 @@ +--- +"miniflare": patch +--- + +Increment the Age response header when responding from cache. + diff --git a/packages/miniflare/src/workers/cache/cache.worker.ts b/packages/miniflare/src/workers/cache/cache.worker.ts index 431d3ece295..a4bdf9126ad 100644 --- a/packages/miniflare/src/workers/cache/cache.worker.ts +++ b/packages/miniflare/src/workers/cache/cache.worker.ts @@ -30,6 +30,7 @@ interface CacheMetadata { headers: string[][]; status: number; size: number; + stored?: number; } type CacheRouteHandler = RouteHandler< @@ -302,6 +303,12 @@ export class CacheObject extends MiniflareDurableObject { // time we don't do this is when the entry isn't found, or expired, in which // case, we just threw a `CacheMiss`) assert(resHeaders !== undefined); + const now = this.timers.now(); + const age = parseInt(resHeaders.get("age") || "0", 10); + const cachedDuration = Math.round( + (now - (cached.metadata.stored || now)) / 1000 + ); + resHeaders.set("Age", String(age + cachedDuration)); resHeaders.set("CF-Cache-Status", "HIT"); resRanges ??= []; @@ -356,6 +363,7 @@ export class CacheObject extends MiniflareDurableObject { headers: Object.entries(headers), status: res.status, size, + stored: this.timers.now(), })); await this.storage.put({