Node.js AWS API网关:403禁止响应飞行前选项请求

Node.js AWS API网关:403禁止响应飞行前选项请求,node.js,reactjs,aws-lambda,aws-api-gateway,fetch-api,Node.js,Reactjs,Aws Lambda,Aws Api Gateway,Fetch Api,我正在使用AWSAPI网关创建API。我已经创建了一个PUT方法来在我的数据库上执行一些功能 您可以在下图中看到,我已将以下内容设置为AWS上的响应标题 这就是我请求作出反应的方式: fetch('https://myawsurl.execute-api.ap-southeast-2.amazonaws.com/Dev/search', { method: 'PUT', headers: { 'Content-Type':'application/json', 'Acc

我正在使用AWSAPI网关创建API。我已经创建了一个PUT方法来在我的数据库上执行一些功能

您可以在下图中看到,我已将以下内容设置为AWS上的响应标题

这就是我请求作出反应的方式:

fetch('https://myawsurl.execute-api.ap-southeast-2.amazonaws.com/Dev/search', {
  method: 'PUT',
  headers: {
    'Content-Type':'application/json',
    'Access-Control-Request-Method': 'PUT',
    'Access-Control-Request-Headers': 'Content-Type'
  },
  body: {
   "searchby": JSON.stringify({"searchby":"test"}),
  }
 }).then(res=>res.json()).
 then((data)=>this.setState({
  jobs:data,
  isLoading:false,
 }));
每当调用fetch时,我的chrome控制台上都会出现以下错误:

CORS策略已阻止从源“”获取“”的访问:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许源”标头。如果不透明响应满足您的需要,请将请求的模式设置为“无cors”,以获取禁用cors的资源。”

从我看到的情况来看,我的回答中清楚地看到了“访问控制允许来源”

我知道邮递员的工作方式不同,但我不会在邮递员身上提出同样的要求时出错

下面是通过邮递员对相同请求的响应标题的屏幕截图

奇怪的是,firefox上的错误与chrome上的不同


您似乎已经有了答案,但对于浏览此帖子的其他人来说,失败的原因是该方法未返回标题

浏览器在调用PUT方法之前代表我们调用此方法。这是预期的行为

下面是api网关关于CORS的文档


屏幕截图显示响应为403错误。这就是需要解决的问题。您设置的Access Control-*响应头不会添加到4xx错误中。您需要将服务器配置为以200 OK而不是403错误响应选项请求。如果你这样做,你设置的标题会像预期的那样添加到响应中。我在AWS API网关上添加了一个带有必要响应头的选项资源。我还改变了我的请求体的结构,显然,我没有正确发送JSON数据。很高兴听到你让它工作起来