Skip to content

Instantly share code, notes, and snippets.

@deckarts
Last active January 18, 2022 05:05
Show Gist options
  • Save deckarts/ef2f2aa1a38d485e14bcf170e9381945 to your computer and use it in GitHub Desktop.
Save deckarts/ef2f2aa1a38d485e14bcf170e9381945 to your computer and use it in GitHub Desktop.
addEventListener("fetch", (event) => {
event.respondWith(
handleRequest(event.request).catch(
(err) => new Response(err.stack, { status: 500 })
)
);
});
const addPreloadBefore = (href) => ({
element: (el) => {
el.before(`<link rel="preload" href="${href}" as="image" />`, { html: true });
}
});
async function handleRequest(request) {
const url = new URL(request.url);
const host = request.headers.get('x-host');
const bypassTransform = request.headers.get('x-bypass-transform');
const acceptHeader = request.headers.get('accept');
if (!host) {
return new Response('x-host headers missing', {status: 403});
}
url.hostname = host
if ((acceptHeader
&& acceptHeader.indexOf('text/html') >= 0)
&& (!bypassTransform
|| (bypassTransform
&& bypassTransform.indexOf('true') === -1))) {
const response = await fetch(url.toString(), request);
const newResponse = new Response(response.body, response);
return new HTMLRewriter()
.on(`link[rel^="dns-prefetch"]`, addPreloadBefore("https://searchengineland.com/images/marquee/keyword_hero_05032021.jpg"))
.transform(newResponse);
}
return fetch(url.toString(), request);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment