gpt4 book ai didi

caching - 如何正确禁用 API 请求的 CloudFront 缓存

转载 作者:行者123 更新时间:2023-12-02 13:24:18 25 4
gpt4 key购买 nike

我已将 AWS CloudFront 设置为提供静态内容来自同一域的 API 服务器。这意味着我有两种行为,一种从 /api 为 API 网关提供服务,另一种为所有其他路径从 S3 提供内容。

问题是我不希望 CF 缓存来自 API 服务器的任何内容。我惊讶地发现似乎没有一个“主设置”来完全禁用缓存行为;相反,文档提到在源上使用 Cache-control: no-cache 或在 CF 行为中打开“基于所有 header 的缓存”。

但是,这些解决方案都不能完全满足我的要求,即不缓存并传递所有 header 。如果我将 Cache-control: no-cache 添加到我的源中,CF 似乎会尊重这一点,但仍然存在 CF 设置的问题。 CF 有一个设置“基于 header 缓存:全部/无/白名单”。文档说要禁用缓存,应该使用“全部”,这是有道理的(尽管与实际设置相比有点模糊:禁用缓存:开/关)。但是,一旦我将此设置设置为“全部”,整个行为就会被禁用,我的 API 请求将根本不会到达 API 网关,而是默认用于非 API 请求的 S3 行为。我找不到对此的任何解释,就像整个行为失败或在没有解释的情况下被禁用。

另一个问题是,“缓存基于”中不存在的 header 不仅会被排除在缓存之外(我无论如何都不想要),而且还会在之前从请求中删除已转发。这对于缓存按预期工作可能是有意义的,但由于我不想要任何缓存,因此必须确保将我使用过的所有 header 列入白名单是非常令人沮丧的。依赖“全部”比必须确保白名单始终是最新的要好得多。

所以:

1) 是否有更好、更清晰的方法来完全禁用 CloudFront 发行版的一个路径的缓存?理想情况下,它甚至不应该依赖于设置某些 header 的源,它应该完全禁用在配置的路径中缓存请求的任何尝试。

2) 当我在“基于 header 的缓存”框中选择“全部”时,为什么我的整个 API 网关目标被禁用?这里发生了什么?

最佳答案

刚刚遇到了同样的问题,最终联系了 AWS 帮助人员解决该问题。

根据AWS同事的说法,“Cache based on headers = All”在API网关上不起作用的原因是,“Host” header 的转发使其不适用。

它对我们有用的方式是将 API 网关行为的 TTL 设置为零(对于最大值和最小值)。

关于caching - 如何正确禁用 API 请求的 CloudFront 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52704816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com