diff options
| author | Travis Fischer <[email protected]> | 2021-06-02 13:59:27 -0400 |
|---|---|---|
| committer | Travis Fischer <[email protected]> | 2021-06-02 13:59:27 -0400 |
| commit | f6321fc3249d83a0059ef47978ed101d3c75375f (patch) | |
| tree | 9da8b59a0c94c08f92506e57653b8c9f55fa85e8 /src/fetch-request.js | |
| download | cf-image-proxy-f6321fc3249d83a0059ef47978ed101d3c75375f.tar.xz cf-image-proxy-f6321fc3249d83a0059ef47978ed101d3c75375f.zip | |
feat: import from notion2site repo
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 +} |