diff --git a/lib/handler/cache-handler.js b/lib/handler/cache-handler.js index b8a882381c2..44b82c4a9bb 100644 --- a/lib/handler/cache-handler.js +++ b/lib/handler/cache-handler.js @@ -97,7 +97,7 @@ class CacheHandler { statusMessage ) - if ( + if ( !util.safeHTTPMethods.includes(this.#cacheKey.method) && statusCode >= 200 && statusCode <= 399 @@ -112,13 +112,11 @@ class CacheHandler { return downstreamOnHeaders() } - const resHeadersLowercase = makeHeaderNamesLowercase(resHeaders) - - const cacheControlHeader = resHeadersLowercase['cache-control'] - const heuristicallyCacheable = resHeadersLowercase['last-modified'] && HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode) + const cacheControlHeader = resHeaders['cache-control'] + const heuristicallyCacheable = resHeaders['last-modified'] && HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode) if ( !cacheControlHeader && - !resHeadersLowercase.expires && + !resHeaders.expires && !heuristicallyCacheable && !this.#cacheByDefault ) { @@ -128,23 +126,23 @@ class CacheHandler { } const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {} - if (!canCacheResponse(this.#cacheType, statusCode, resHeadersLowercase, cacheControlDirectives)) { + if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives)) { return downstreamOnHeaders() } const now = Date.now() - const resAge = resHeadersLowercase.age ? getAge(resHeadersLowercase.age) : undefined + const resAge = resHeaders.age ? getAge(resHeaders.age) : undefined if (resAge && resAge >= MAX_RESPONSE_AGE) { // Response considered stale return downstreamOnHeaders() } - const resDate = typeof resHeadersLowercase.date === 'string' - ? parseHttpDate(resHeadersLowercase.date) + const resDate = typeof resHeaders.date === 'string' + ? parseHttpDate(resHeaders.date) : undefined const staleAt = - determineStaleAt(this.#cacheType, now, resAge, resHeadersLowercase, resDate, cacheControlDirectives) ?? + determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ?? this.#cacheByDefault if (staleAt === undefined || (resAge && resAge > staleAt)) { return downstreamOnHeaders() @@ -158,8 +156,8 @@ class CacheHandler { } let varyDirectives - if (this.#cacheKey.headers && resHeadersLowercase.vary) { - varyDirectives = parseVaryHeader(resHeadersLowercase.vary, this.#cacheKey.headers) + if (this.#cacheKey.headers && resHeaders.vary) { + varyDirectives = parseVaryHeader(resHeaders.vary, this.#cacheKey.headers) if (!varyDirectives) { // Parse error @@ -168,7 +166,7 @@ class CacheHandler { } const deleteAt = determineDeleteAt(baseTime, cacheControlDirectives, absoluteStaleAt) - const strippedHeaders = stripNecessaryHeaders(resHeadersLowercase, cacheControlDirectives) + const strippedHeaders = stripNecessaryHeaders(resHeaders, cacheControlDirectives) /** * @type {import('../../types/cache-interceptor.d.ts').default.CacheValue} @@ -184,8 +182,8 @@ class CacheHandler { deleteAt } - if (typeof resHeadersLowercase.etag === 'string' && isEtagUsable(resHeadersLowercase.etag)) { - value.etag = resHeadersLowercase.etag + if (typeof resHeaders.etag === 'string' && isEtagUsable(resHeaders.etag)) { + value.etag = resHeaders.etag } this.#writeStream = this.#store.createWriteStream(this.#cacheKey, value) diff --git a/lib/interceptor/cache.js b/lib/interceptor/cache.js index 6d1225680e7..84ae3646cbc 100644 --- a/lib/interceptor/cache.js +++ b/lib/interceptor/cache.js @@ -318,7 +318,7 @@ module.exports = (opts = {}) => { // Not a method we want to cache or we don't have the origin, skip return dispatch(opts, handler) } - +console.log('reqHeaders=', opts.headers) const reqCacheControl = opts.headers?.['cache-control'] ? parseCacheControlHeader(opts.headers['cache-control']) : undefined diff --git a/tmp.mjs b/tmp.mjs new file mode 100644 index 00000000000..534c8035a17 --- /dev/null +++ b/tmp.mjs @@ -0,0 +1,5 @@ +import { Client, interceptors } from './index.js' + +const client = new Client('https://google.com').compose(interceptors.cache()) + +await client.request({ path: '/', method: 'GET', origin: 'google.com' })