cf worker代理解决cors问题

让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
  })
}
9 个赞

先赞,具体都可以用来干什么

真快,就是有些后端不允许不同域名发起请求,会报错,这个代理可以解决

太强了

chat-next-web用webdav就因为cors无法同步,我试试这个可不可以

这个相当于前后端联调时的devServer.proxy

mark

常规话题软件开发