Cloudflare 工作人员 CORS 被忽略

Hen*_*jsS 2 javascript ajax cloudflare axios cloudflare-workers

我使用 CF Workers 创建了一个 SendGrid 表单并设置(用于测试)Access-Control-Allow-Origin", '*' 但它在前端被忽略:

Access to XMLHttpRequest at 'https://<domain>.workers.dev/' from origin 'https://<frontend-domain>.dev' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

我是否还需要将其添加到 AXIOSPOST请求中?

这是我的工人文件中的代码:

const myHeaders = new Headers();
  myHeaders.set("Access-Control-Allow-Origin", '*');
  myHeaders.set("Access-Control-Allow-Methods", "GET,HEAD,POST,OPTIONS");
  myHeaders.set("Access-Control-Max-Age", "86400",);
  return new Response((emailResponse.ok), {status: 200, headers: myHeaders}) 
Run Code Online (Sandbox Code Playgroud)

这是 AXIOS 请求:

this.$axios.$post(
  "https://<domain>.workers.dev/",
  {
    name: this.mailData.name,
    eMail: this.mailData.eMail,
    phone: this.mailData.phone,
    message: this.mailData.message,
  },
  {
    headers: {
      "Content-Type": "application/json",
    },
  }
);

Run Code Online (Sandbox Code Playgroud)

使用 Insomnia 一切正常,并且标题在那里可见: 在此输入图像描述

Ken*_*rda 8

您已正确设置响应本身的标头POST。然而,在浏览器发送之前POST,它会使用“预检请求”来检查是否POST允许跨域。预检请求是一个OPTIONS请求,使用相同的 URL。OPTIONS您还需要使用相同的访问控制标头和状态代码 204(无内容)响应请求。

请参阅有关预检请求的 MDN 文档

或者,如果您的应用程序将POST使用Content-Type: text/plain而不是接受请求Content-Type: application/json,那么这将不需要预检请求,因为Content-Type: text/plain符合“简单请求”的资格,因此不需要预检。