通过传入自定义 header 使 Cloudfront 缓存数据无效

Invalidate Cloudfront's cached data by passing in custom header

我需要一些资源或大方向。

我正在研究使用 Cloudfront 来帮助解决调用我的服务时的延迟问题。

我希望能够提供缓存数据,但需要允许客户端能够指定何时他们想要绕过缓存数据并获取最新数据。

我知道我可以在查询参数中发送一个随机值来使缓存失效。但我希望能够发送一个自定义的 header 来做同样的事情。

理想情况下,我想使用 API 网关在幕后创建的 Cloudfront。这可能吗?或者我是否需要创建一个新的 CloudFront 以位于 API 网关之前?

有人做过吗?有什么资源可以指给我看吗?

CloudFront 基于 headers 进行缓存。

在 header 上创建自定义 header 和白名单。 如果在缓存中找不到该值,CloudFront 将从源获取。

希望对您有所帮助。

编辑:

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html

Header 基于缓存。

实际上,您不能通过传递特定 header 或使用查询参数来 使 CloudFront 缓存无效。那是缓存 busting,而不是失效。

您可以将 CloudFront 配置为在缓存键中包含特定 header 的值,只需将 header 列入白名单以转发到源——即使源忽略它。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesForwardHeaders

但是...需要为您的 API 使用者提供一种绕过缓存的方法,这似乎是您的设计存在问题。使用自适应 Cache-Control 响应 header 并将响应缓存在 CloudFront 中适当的时间,此问题就会消失。

否则,聪明的人会一直绕过它,不断改变那个值。