【发布时间】:2019-03-13 06:36:09
【问题描述】:
我已将 AWS CloudFront 设置为提供静态内容和来自同一域的 API 服务器。这意味着我有两种行为,一种是从/api 为 API 网关提供服务,另一种是从 S3 为所有其他路径提供内容。
问题是我不希望 CF 从 API 服务器缓存任何内容。我惊讶地发现似乎没有完全禁用缓存行为的“主设置”;相反,文档指的是在源上使用Cache-control: no-cache或在 CF 行为中打开“基于所有标头的缓存”。
然而,这些解决方案都不能完全满足我对简单地不缓存 和 传递所有标头的要求。如果我将Cache-control: no-cache 添加到我的来源,CF 似乎尊重这一点,但仍然存在 CF 设置的问题。 CF 有一个设置“基于标头的缓存:全部/无/白名单”。文档说要禁用缓存,应该使用“全部”,这是有道理的(尽管与实际设置相比有点模糊:禁用缓存:开/关)。但是,一旦我将此设置设置为“全部”,整个行为就会被禁用,我的 API 请求根本不会到达 API 网关,而是默认为用于非 API 请求的 S3 行为。我找不到任何解释,就像整个行为失败或在没有解释的情况下被禁用。
另一个问题是“基于缓存”中不存在的标头不仅会被排除在缓存之外(无论如何我都不想要),而且会从之前的请求中剥离它已转发。这对于缓存按预期工作可能是有意义的,但是由于我不想要任何缓存,因此必须确保将我曾经使用过的所有标头列入白名单是非常令人沮丧的。依赖“全部”比确保白名单始终是最新的要好得多。
所以:
1) 是否有更好、更清晰的方法来完全禁用 CloudFront 分配的一个路径的缓存?理想情况下,它甚至不应该依赖源设置某些标头,它应该完全禁止在配置的路径中缓存请求的任何尝试。
2) 当我在“基于标头的缓存”框中选择“全部”时,为什么我的整个 API 网关目标被禁用?这里发生了什么?
【问题讨论】:
标签: caching aws-api-gateway amazon-cloudfront cache-control