Skip to content
This repository was archived by the owner on Jul 6, 2025. It is now read-only.

Commit 7ffdce8

Browse files
committed
Add weak validator for Etag header
1 parent a5af685 commit 7ffdce8

File tree

4 files changed

+7
-7
lines changed

4 files changed

+7
-7
lines changed

server/mod.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,11 @@ export const serve = (options: ServerOptions = {}) => {
141141
const deployId = getDeploymentId();
142142
let etag: string | null = null;
143143
if (deployId) {
144-
etag = `${btoa(pathname).replace(/[^a-z0-9]/g, "")}-${deployId}`;
144+
etag = `W/${btoa(pathname).replace(/[^a-z0-9]/g, "")}-${deployId}`;
145145
} else {
146146
const { mtime, size } = stat;
147147
if (mtime) {
148-
etag = mtime.getTime().toString(16) + "-" + size.toString(16);
148+
etag = `W/${mtime.getTime().toString(16)}-${size.toString(16)}`;
149149
headers.append("Last-Modified", new Date(mtime).toUTCString());
150150
}
151151
}

server/renderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,11 @@ export default {
168168
const deployId = getDeploymentId();
169169
let etag: string | null = null;
170170
if (deployId) {
171-
etag = `${btoa("./index.html").replace(/[^a-z0-9]/g, "")}-${deployId}`;
171+
etag = `W/${btoa("./index.html").replace(/[^a-z0-9]/g, "")}-${deployId}`;
172172
} else {
173173
const { mtime, size } = await Deno.lstat("./index.html");
174174
if (mtime) {
175-
etag = mtime.getTime().toString(16) + "-" + size.toString(16);
175+
etag = `W/${mtime.getTime().toString(16)}-${size.toString(16)}`;
176176
headers.append("Last-Modified", new Date(mtime).toUTCString());
177177
}
178178
}

server/serve_dist.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,15 @@ export default {
2929
const deployId = getDeploymentId();
3030
let etag: string | null = null;
3131
if (deployId) {
32-
etag = `${btoa(pathname).replace(/[^a-z0-9]/g, "")}-${deployId}`;
32+
etag = `W/${btoa(pathname).replace(/[^a-z0-9]/g, "")}-${deployId}`;
3333
} else {
3434
const stat = await Deno.lstat(filePath);
3535
if (!stat.isFile) {
3636
return new Response("File Not Found", { status: 404 });
3737
}
3838
const { mtime, size } = stat;
3939
if (mtime) {
40-
etag = mtime.getTime().toString(16) + "-" + size.toString(16);
40+
etag = `W/${mtime.getTime().toString(16)}-${size.toString(16)}`;
4141
headers.append("Last-Modified", new Date(mtime).toUTCString());
4242
}
4343
}

server/transformer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export default {
5757
}
5858

5959
const etag = mtime
60-
? `${mtime.toString(16)}-${sourceCode.length.toString(16)}-${buildHash.slice(0, 8)}`
60+
? `W/${mtime.toString(16)}-${sourceCode.length.toString(16)}-${buildHash.slice(0, 8)}`
6161
: await util.computeHash("sha-1", sourceCode + buildHash);
6262
if (req.headers.get("If-None-Match") === etag) {
6363
return new Response(null, { status: 304 });

0 commit comments

Comments
 (0)