Skip to content

Commit

Permalink
fix: cache key should use final canonized url
Browse files Browse the repository at this point in the history
  • Loading branch information
esroyo committed Feb 22, 2024
1 parent a822aab commit e4e787d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 32 deletions.
61 changes: 31 additions & 30 deletions src/sjs-request-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,35 +25,6 @@ export async function sjsRequestHandler(
const HOMEPAGE = Deno.env.get('HOMEPAGE');
const OUTPUT_BANNER = Deno.env.get('OUTPUT_BANNER');
const buildTarget = getBuildTargetFromUA(req.headers.get('user-agent'));
if (CACHE) {
performance.mark('cache-read');
const value = await retrieveCache(denoKv, [
req.url,
buildTarget,
]);
performance.measure('cache-read', 'cache-read');
if (value) {
performance.measure('cache-hit', { start: performance.now() });
const response = await createFinalResponse(
{
...value,
headers: new Headers(value.headers),
},
performance,
buildTarget,
false,
);
if (CACHE_CLIENT_REDIRECT && isRedirect(response.status)) {
return createFastPathResponse(
response,
performance,
buildTarget,
);
}
return response;
}
performance.measure('cache-miss', { start: performance.now() });
}
const selfUrl = new URL(req.url);
const basePath = `/${BASE_PATH}/`.replace(/\/+/g, '/');
const upstreamOrigin = `${UPSTREAM_ORIGIN}/`.replace(/\/+$/, '/');
Expand Down Expand Up @@ -94,6 +65,36 @@ export async function sjsRequestHandler(
pair[0],
typeof pair[1] === 'string' ? replaceOrigin(pair[1]) : pair[1],
] as [string, string]);
const canonicalUrl = replaceOrigin(req.url);
if (CACHE) {
performance.mark('cache-read');
const value = await retrieveCache(denoKv, [
canonicalUrl,
buildTarget,
]);
performance.measure('cache-read', 'cache-read');
if (value) {
performance.measure('cache-hit', { start: performance.now() });
const response = await createFinalResponse(
{
...value,
headers: new Headers(value.headers),
},
performance,
buildTarget,
false,
);
if (CACHE_CLIENT_REDIRECT && isRedirect(response.status)) {
return createFastPathResponse(
response,
performance,
buildTarget,
);
}
return response;
}
performance.measure('cache-miss', { start: performance.now() });
}
performance.mark('upstream');
const upstreamResponse = await _internals.fetch(upstreamUrl.toString(), {
headers: cloneHeaders(req.headers, denyHeaders),
Expand All @@ -108,7 +109,7 @@ export async function sjsRequestHandler(
}
const response = await createFinalResponse(
{
url: req.url,
url: canonicalUrl,
body,
headers: cloneHeaders(
upstreamResponse.headers,
Expand Down
2 changes: 0 additions & 2 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,6 @@ export const createFastPathResponse = async (

const rebuildedHeaders = cloneHeaders(response.headers);

rebuildedHeaders.set('x-debug-redirect-cache-miss', JSON.stringify({ redirectLocation, buildTarget }));

performance.clearMeasures('total');
performance.measure('total', 'total');

Expand Down

0 comments on commit e4e787d

Please sign in to comment.