- main
- manifest
- deps
- main
- Install
- Run
addEventListener("fetch", (event) => event.respondWith(handleRequest(event)));
async function handleRequest(event) {
const request = event.request;
const useGzip =
request.headers.get("accept-encoding")?.includes("gzip") ?? false;
const bereq = new Request(request);
bereq.headers.delete("accept-encoding");
if (useGzip) {
bereq.headers.set("accept-encoding", "gzip");
}
const beresp = await fetch(bereq, {
backend: "origin_0"
});
let originalBody;
if (beresp.headers.get("content-encoding") === "gzip") {
const decompressionStream = new DecompressionStream("gzip");
const decompressedResponse = new Response(
beresp.body.pipeThrough(decompressionStream)
);
originalBody = await decompressedResponse.text();
} else {
originalBody = await beresp.text();
}
const transformedBody = originalBody.replaceAll(
'<h1 id="httpme">HTTP me!</h1>',
'<h1 id="httpme">HTTP me (modified)!</h1>'
);
const response = new Response(transformedBody, {
status: beresp.status,
headers: beresp.headers
});
response.headers.delete("content-encoding");
if (useGzip) {
response.headers.set("x-compress-hint", "gzip");
}
return response;
}