Skip to content

Instantly share code, notes, and snippets.

@jaredly
Created June 4, 2022 03:31
Show Gist options
  • Save jaredly/8caa0d4e17460e1303f256dfd317dcfc to your computer and use it in GitHub Desktop.
Save jaredly/8caa0d4e17460e1303f256dfd317dcfc to your computer and use it in GitHub Desktop.
cloudflare worker CORS proxy
/**
* Usage:
* https://worker-name.myusername.workers.dev/?url=http://google.com
*/
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
/**
* Respond to the request
* @param {Request} request
*/
async function handleRequest(request) {
if (request.method === "OPTIONS") {
return new Response('ok', {headers: {
"access-control-allow-origin": request.headers.get('origin'),
"access-control-allow-methods": "GET",
"access-control-allow-headers": request.headers.get("access-control-request-headers"),
}})
}
const url = new URL(request.url)
const requested_url = url.searchParams.get('url')
const userAgent = url.searchParams.get('userAgent')
const headers = {...request.headers}
if (userAgent) {
headers["User-Agent"] = userAgent
}
const res = await fetch(requested_url, {
headers: headers})
const body = await res.arrayBuffer()
const resHeaders = {}
for (let [k, v] of res.headers.entries()) {
resHeaders[k] = v
}
return new Response(body, {
status: res.status,
headers: {
...resHeaders,
"access-control-allow-origin": request.headers.get('origin'),
}
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment