Amazon web services 从RESTAPI返回413响应时的最佳实践

Amazon web services 从RESTAPI返回413响应时的最佳实践,amazon-web-services,aws-lambda,http-status-code-413,Amazon Web Services,Aws Lambda,Http Status Code 413,我的RESTAPI偶尔需要返回413“负载太大”响应 作为上下文:我将AWS与API网关和Lambda一起使用。Lambda的最大有效负载为6Mb。有时-不到0.1%的请求-负载大于6Mb,并且我的API返回413状态 我处理这个问题的方法是提供一种从API请求数据的替代方法——作为URL,URL链接到存储在S3上的json文件中的数据。S3位于一个具有生命周期规则的存储桶中,该规则在短时间后自动删除文件 这可以正常工作,但有一个不令人满意的特性,即一个大负载请求会导致客户端进行3个单独的调用:

我的RESTAPI偶尔需要返回413“负载太大”响应

作为上下文:我将AWS与API网关和Lambda一起使用。Lambda的最大有效负载为6Mb。有时-不到0.1%的请求-负载大于6Mb,并且我的API返回413状态

我处理这个问题的方法是提供一种从API请求数据的替代方法——作为URL,URL链接到存储在S3上的json文件中的数据。S3位于一个具有生命周期规则的存储桶中,该规则在短时间后自动删除文件

这可以正常工作,但有一个不令人满意的特性,即一个大负载请求会导致客户端进行3个单独的调用:

  • 向API发出标准请求并接收413响应
  • 对存储在S3URL中的数据向API发出第二个请求。我在GET请求中使用了一个
    asURL=true
    参数
  • 发出第三个请求以从S3存储桶中检索数据
  • 我正在考虑的另一种选择是在413响应中嵌入S3URL。例如,将其嵌入到自定义头中。这样可以避免第二次呼叫

    我还可以改变方法,使每个请求都作为S3URL返回,但是99.9%的请求将不必要地进行2次调用,而不仅仅是1次


    这里有没有最好的做法,或者同样的,要避免的坏做法?

    我会按照你说的方式做——在413响应中嵌入S3URL。然后,从413恢复的责任将由客户端检查响应中的413并调用s3。如果消费者是内部的,那么就可以了。如果使用者是外部的,可能会带来不便。

    我假设有效负载已经压缩。如果没有,试试看。是的,已经压缩了。谢谢。消费者主要是内部用户-移动应用程序或网站。我确实有一些外部消费者。您是否使用s3预签名URL我不使用s3预签名URL。。。但我认为这与问题无关?