3

我有一个使用无服务器框架创建的 HTTPApi API 网关。但是对于某些路线,CORS 不起作用。

provider:
  name: aws
  runtime: nodejs12.x
  stage: dev
  region: us-west-2
  timeout: 29
  httpApi:
    cors:
      allowedOrigins:
        - '*'
      allowedMethods:
        - GET
        - OPTIONS
        - POST
        - PUT
        - DELETE
      allowedHeaders:
        - Content-Type
        - X-Amz-Date
        - Authorization
        - X-Api-Key
        - X-Amz-Security-Token
        - X-Amz-User-Agent
        - X-Transaction-Key
        - Access-Control-Allow-Origin

我尝试cors:true在提供程序上设置选项,但仍然不起作用。这是在所有路由上返回的响应,无论是 4xx 还是 2xx 代码。

return {
    statusCode: StatusCode,
    headers: {
      "Content-Type": "application/json",
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Credentials" : true,
      "Access-Control-Allow-Headers" : "*",
      "Access-Control-Allow-Methods": "OPTIONS,POST,GET,PUT,DELETE"
    },
    body: JSON.stringify(Res, null, 2),
  };

如果我检查控制台,我可以看到确实应用了这些选项 但是,有些路由确实有效 ,而 另一些则没有,那些不起作用的有X-Transaction-Key标题并且OPTIONS不返回access-control-allow-headers: authorization,content-type,x-amz-date,x-amz-security-token,x-amz-user-agent,x-api-key,x-transaction-key标题

我错过了什么?提前致谢

4

2 回答 2

4

我也遇到过类似的问题。拉我的头发3天后。我发现了我的问题。一切都很好,除了在我的客户端中,很少有错误的 URL(拼写错误)指向我的服务器 API。这就是为什么很少有 API 可以正常工作而其中很少有不能正常工作的原因。

修复到正确的 URL 后,一切正常。这是我的学习,希望有一天能对其他人有所帮助:

  1. 检查你是 serverless.yml 文件的 cors 部分,这里是一个例子

     cors:
        origin: '*'
        headers:
          - Content-Type
          - X-Amz-Date
          - Authorization
          - X-Api-Key
          - X-Amz-Security-Token
        allowCredentials: false
    
  2. 检查 lamdba 以获取正确的响应标头,因为问题包含

用于故障排除的其他工具:

希望对您有所帮助,谢谢!

快乐编码

于 2021-05-12T15:27:18.763 回答
-1

您是否尝试过修复函数事件中的 'cors: true' 值,就像在无服务器中使用 cors 一样

于 2021-02-09T07:39:58.517 回答