diff options
Diffstat (limited to 'src/fetch-request.js')
| -rw-r--r-- | src/fetch-request.js | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/fetch-request.js b/src/fetch-request.js new file mode 100644 index 0000000..4e6c6ff --- /dev/null +++ b/src/fetch-request.js @@ -0,0 +1,64 @@ +import * as globalHeaders from './global-res-headers' + +const headerWhitelist = new Set([ + 'connection', + 'content-disposition', + 'content-type', + 'content-length', + 'cf-polished', + 'date', + 'status', + 'transfer-encoding' +]) + +export async function fetchRequest(event, { originReq }) { + // const originRes = await fetch(originReq) + + // console.log( + // 'req', + // originReq.url, + // Object.fromEntries(originReq.headers.entries()) + // ) + + const originRes = await fetch(originReq, { + cf: { + polish: 'lossy', + cacheEverything: true + } + }) + + // Construct a new response so we can mutate its headers + const res = new Response(originRes.body, originRes) + // console.log('res0', res.status, Object.fromEntries(res.headers.entries())) + + // Stripe additional headers from the response that may impact cacheability + // like content security policy stuff + normalizeResponseHeaders(res) + + // Override cache-control + res.headers.set( + 'cache-control', + 'public, immutable, s-maxage=31536000, max-age=31536000, stale-while-revalidate=60' + ) + + // Set CORS headers + for (const header of globalHeaders.globalResHeadersKeys) { + res.headers.set(header, globalHeaders.globalResHeaders[header]) + } + + // console.log('res1', res.status, Object.fromEntries(res.headers.entries())) + return res +} + +function normalizeResponseHeaders(res) { + const headers = Object.fromEntries(res.headers.entries()) + const keys = Object.keys(headers) + + for (const key of keys) { + if (!headerWhitelist.has(key)) { + res.headers.delete(key) + } + } + + return res +} |