如何通过 API Gateway 源在 AWS Cloudfront 中提供压缩内容而不进行缓存?

问题描述 投票:0回答:1

我正在使用具有区域 API 网关源的 Cloudfront 发行版。对于无法使用缓存的端点,如果请求包含“Accept-Encoding”标头,我仍然需要压缩响应正文。

这是一个微不足道的要求,我想我已经尝试了一切:

  • TTL=0 的“假”缓存策略不允许打开压缩。
  • 如果没有传递 Accept-Encoding 标头,API 网关压缩将无法工作,并且 Cloudfront 永远不允许传递它。
  • 源请求策略不允许传递自定义 Accept-Encoding 标头。
  • 带有“所有查看器标头”的源请求策略不起作用,因为 API Gateway 不喜欢主机标头。设置自定义域无法与使用相同域的 Cloudfront 一起使用。
  • Origin 不允许添加自定义 Accept-Encoding 标头。

好吧,在尝试了一切之后,我已经预计这是不可能的有原因。但我不明白为什么。

请解释一下,压缩非缓存响应有什么不好?

或者我有机会做到这一点吗?

UPD

原始请求不允许使用 Cloufront 功能

在 Lambda@Edge 函数中 Accept-Encoding 是只读的。

amazon-web-services http aws-api-gateway amazon-cloudfront content-negotiation
1个回答
0
投票

您必须启用缓存,但您可以设置 1 秒的低 TTL,然后将像

X-Amz-Cf-Id
这样的标头添加到您的缓存策略中,以充当缓存破坏者。由于
X-Amz-Cf-Id
的值对于每个请求都是唯一的,因此它将有效地禁用缓存。

CloudFront 在将请求转发到您的源之前将

X-Amz-Cf-Id
标头添加到查看器请求中。标头值包含唯一标识请求的加密字符串。

© www.soinside.com 2019 - 2024. All rights reserved.