CORS阻止Kotlin lambda中的请求,但不在相同的设置节点lambda中

CORS阻止Kotlin lambda中的请求,但不在相同的设置节点lambda中,kotlin,aws-lambda,cors,serverless,Kotlin,Aws Lambda,Cors,Serverless,我有一个lambda,用Kotlin编写,没有服务器,CORS就是不工作。我觉得我什么都试过了。我使用相同的sls.sh命令和yaml文件部署了一个节点Lambda。函数如下所示 hello: handler: handler.hello events: - http: path: hello method: post cors: true 我在Node和Kotlin中的响应如下所示: { "statusCode": 200,

我有一个lambda,用Kotlin编写,没有服务器,CORS就是不工作。我觉得我什么都试过了。我使用相同的
sls.sh
命令和yaml文件部署了一个节点Lambda。函数如下所示

hello:
  handler: handler.hello
  events:
    - http:
        path: hello
        method: post
        cors: true
我在Node和Kotlin中的响应如下所示:

{
  "statusCode": 200,
  "headers": {
    "Access-Control-Allow-Origin": "*"
  },
  "body": "{\"id\": \"f9f76590-xxxx-xxxx-xxxx-9c8e99238f40\"}"
}
在节点情况下,这一切都非常有效。我这样做了一个
fetch
调用,它工作正常(为了简洁起见,省略了承诺决议):

在Kotlin案中我得到了这个CORS错误

从源站获取“https://{lambda URL}/hello”的访问权限 “”已被CORS策略阻止:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源。如果不透明的响应满足您的需要,请设置请求的 模式设置为“无cors”,以获取禁用cors的资源

我尝试在API网关面板中“启用CORS”,但我发现它已经启用:

然后点击submit以获取错误(无效响应状态代码)

当我将鼠标悬停在错误图标上时,它会显示“指定的响应状态代码无效”

在网关响应下,每个子项(默认4XX、默认5xx等)下都设置了响应头。这在我的节点和Kotlin lambdas中是相同的

我现在完全没有主意了

唯一可能奇怪的是,我注意到,在我的节点请求中,我在浏览器网络面板的响应标题中看到了访问控制允许源代码:,但在Kotlin one中我没有看到它。

由此:

我可以看出,您没有在post方法中创建集成响应。

尝试以下配置:


我发现我的CORS问题是由于服务器错误造成的。如果您的服务器出现错误,并且API网关无法获得响应,那么您将收到CORS错误,因为网关本身没有CORS头

虽然修复很容易(只需处理服务器错误),但很难发现。我希望这篇文章能更好地记录在某个地方,希望其他人也能找到:)


特别是在我的例子中,它为什么没有出现在Node中而出现在Kotlin中,是因为类型。浏览器正在发送一个类型节点,该节点自动更正了类型(数字为字符串),但Kotlin期望该类型,并抛出了一个类型错误。

将尝试此操作,但我在我的节点服务中未看到此操作正常。为什么这里需要这样做(如果可行的话)试试看,让我知道
  var makeRequest = function (data) {
    fetch('https://{lambda URL}/hello', {
      'headers': {
        'content-type': 'application/json'
      },
      'body': JSON.stringify({ data }),
      'method': 'POST'
      })
  }