fix: omit content headers from cached 304 responses (#7637)

This commit is contained in:
Rayan Salhab authored and GitHub committed 2026-08-26 11:26:04 +08:00
1 parent fcc51ebf46
commit baf83f59da
2 files changed
+59

No files matched your search

+57
View File
@@ -0,0 +1,57 @@
const { after, before, describe, test } = require("node:test");
const assert = require("node:assert");
const http = require("node:http");
const apicache = require("../../server/modules/apicache/apicache").newInstance();
/**
* Request the test server.
* @param {number} port Server port
* @param {object} headers Request headers
* @returns {Promise<import("node:http").IncomingMessage>} Server response
*/
function request(port, headers = {}) {
return new Promise((resolve, reject) => {
const req = http.request({ port, path: "/cached", headers }, resolve);
req.on("error", reject);
req.end();
});
}
describe("API cache", () => {
let server;
let port;
before(async () => {
const cache = apicache.middleware("1 minute");
server = http.createServer((req, res) => {
cache(req, res, () => {
const body = "cached body";
res.setHeader("Content-Type", "text/plain");
res.setHeader("Content-Length", Buffer.byteLength(body));
res.setHeader("ETag", '"cached"');
res.end(body);
});
});
await new Promise((resolve) => server.listen(0, resolve));
port = server.address().port;
});
after(async () => {
apicache.clear("/cached");
await new Promise((resolve) => server.close(resolve));
});
test("cached response omits representation headers for a matching ETag", async () => {
const warmResponse = await request(port);
warmResponse.resume();
await new Promise((resolve) => warmResponse.on("end", resolve));
const response = await request(port, { "If-None-Match": '"cached"' });
response.resume();
assert.strictEqual(response.statusCode, 304);
assert.strictEqual(response.headers.etag, '"cached"');
assert.strictEqual(response.headers["content-length"], undefined);
assert.strictEqual(response.headers["content-type"], undefined);
});
});