让AI糊了一个cf worker,解决前端发送请求的跨域cors报错:
可以post也可以get,添加一个参数 proxy_url
为原本要访问的api地址
实测可用,如果不行的话让AI再调整一下吧,感谢shared.oaifree
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
const proxyUrl = url.searchParams.get('proxy_url')
if (!proxyUrl) {
return new Response('proxy_url query parameter is required', { status: 400 })
}
if (request.method === 'OPTIONS') {
return handleOptions(request)
}
const proxyRequestInit = {
method: request.method,
headers: request.headers,
body: request.method !== 'GET' && request.method !== 'HEAD' ? request.body : null
}
const proxyRequest = new Request(proxyUrl, proxyRequestInit)
const response = await fetch(proxyRequest)
return handleResponse(response)
}
function handleOptions(request) {
const headers = new Headers()
headers.set('Access-Control-Allow-Origin', '*')
headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS')
headers.set('Access-Control-Allow-Headers', request.headers.get('Access-Control-Request-Headers'))
return new Response(null, {
status: 204,
headers
})
}
function handleResponse(response) {
const newHeaders = new Headers(response.headers)
newHeaders.set('Access-Control-Allow-Origin', '*')
newHeaders.set('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS')
newHeaders.set('Access-Control-Allow-Headers', '*')
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
})
}