如何为不存在的端点制作无服务器 return 404 而不是 403?

How to make Serverless return 404 instead of 403 for non-existing endpoints?

我按照创建 Hello World 应用程序的说明尝试了无服务器框架。一切正常,调用 [url]/dev/hello-world returns 200 响应并按预期输出 json。

默认情况下,看起来不存在的端点的响应是 403 http 状态代码 json {"message":"Missing Authentication Token"}.

我想使用该框架托管一个网站。 有什么方法可以使不存在的端点的无服务器 return 404 而不是 403?

返回 403 而不是 404 是 deliberate design decision

This is a pattern that is used in many other AWS APIs (most notably S3). In S3, if the user would have had permissions to the see presence of the key (via the ListBucket permission), a 404 will be returned; otherwise a 403 will be returned. Because API Gateway enables permissions at the method level, we can't know whether or not the user should be permitted to have knowledge of the existence of the API resource level, and default to the 403 as a result.

您可以选择使用 {proxy+} 模式捕获所有缺失的 API 方法。

events:
  - http:
      path: {proxy+} # catch any path not specified elsewhere
      method: get    # or change to any method if you prefer

我做了一些不同的事情,它与 API 调用无关,但这是我在 CloudFrontDistribution 部分使用无服务器托管网站的最终目标。

CustomErrorResponses:
     ErrorCode: 403
     ResponseCode: 404
     ResponsePagePath: /404.html