Skip to content

Instantly share code, notes, and snippets.

@klinkby
Last active April 10, 2021 21:17
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save klinkby/8e161a3e2926ecc7d7b53a5c57bf0790 to your computer and use it in GitHub Desktop.
let securityHeaders = {
"Content-Security-Policy": "default-src 'self' 'unsafe-inline'",
"X-Xss-Protection": "1; mode=block",
"X-Frame-Options": "DENY",
"Referrer-Policy": "strict-origin-when-cross-origin",
"Permissions-Policy": "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()"
};
addEventListener('fetch', event => {
event.respondWith(addHeaders(event.request));
});
async function addHeaders(req) {
let response = await fetch(req);
if (404 === response.status) {
return new Response(null, {
status: 307,
statusText: "Temporary Redirect",
headers: { "Location": "/404/" }
});
}
let newHdrs = new Headers(response.headers);
if (newHdrs.has("Content-Type") && !newHdrs.get("Content-Type").includes("text/html")) {
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHdrs
});
}
Object.keys(securityHeaders).map(function (name, index) {
newHdrs.set(name, securityHeaders[name]);
});
let reqUrl = new URL(req.url);
if ("/404/" === reqUrl.pathname) {
return new Response(response.body, {
status: 404,
statusText: "Not Found",
headers: newHdrs
});
}
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHdrs
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment