API 网关缓存与 CloudFront
API Gateway Caching vs CloudFront
我对 API Gateway 和 CloudFront 如何协同工作感到有点困惑。最终,我希望能够将自定义 header 和值视为我的缓存键的一部分。我知道这可以通过白名单来完成(如果我使用的是 CloudFront)。
所以当我提出以下请求时:
GET /pagesRead/4
Some-Header: fizz
这returns,例如,'29页'
然后有一个 post 将 id 4 更新为“45 页”
如果我提出这个要求
GET /pagesRead/4
Some-Header: buzz
现在return'45页'
但我使用的是 API 网关,它显然在幕后拥有自己的 CloudFront。有没有一种方法可以配置 API 网关以使用其 'behind-the-scenes' CloudFront 将我的自定义 header 列入白名单?这还需要做吗?
根据此文档:AWS-API-Gatway,似乎我可以在 API 网关 中启用 API 缓存,它会将我的 header 视为缓存键的一部分。
我理解正确吗?如果我只想让我的 headers 成为缓存键的一部分,那么 'Enabling API Caching' 和 [=57 之间有什么区别=] 网关并在 API 网关和 CloudFront 中的 white-listing 之上添加 CloudFront 实例?
更新:
我在 API 网关中添加了这样的 header:
但是在 GET 上,我从缓存中获取了过时的数据。
GET /pagesRead/4 test-header: buzz
区别在于 API 网关实际上并不使用 CloudFront 缓存。 CloudFront 确实为 所有 API 网关 APIs edge-optimized API 端点提供一些 front-end 服务,但缓存不似乎是其中之一,基于以下内容:
API Gateway enables caching by creating a dedicated cache instance.
...和...
You should not use the X-Cache
header from the CloudFront response to determine if your API is being served from your API Gateway cache instance.
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html
可以在您创建的 CloudFront 分配后面级联边缘优化 API 网关端点,但这并非没有某些不便之处。延迟会有所增加,因为您要经过更多系统。考虑到该配置,CloudFront-Is-*-Viewer
和 CloudFront-Viewer-Country
header 以及客户端 IP 的任何概念都可能无效,因为 API 网关部署将看到额外的属性CloudFront 分布在它前面,而不是真正的客户端。 X-Forwarded-For
仍然是正确的,但必须小心处理,因为它将包含一个必须正确处理的额外跃点。
对于您想要将 API 网关置于您自己的 CloudFront 分配之后的应用程序,使用新的区域端点之一来部署您的 API 阶段。
it will consider my headers as part of the cache key.
您确实必须根据您引用的文档显式配置缓存键,但是 API 网关缓存随后将根据 header 的值缓存响应,并且缓存键中的其他属性。
¹ 边缘优化端点。 API 网关现在有 two different kinds of endpoints。原来的设计现在叫做 edge-optimized,新的选项叫做 regional。区域端点不使用来自 CloudFront 的 front-end 服务,并且在从同一 AWS 区域内的 EC2 访问时可能会提供较低的延迟。推出新的区域功能时,所有现有端点都被归类为 edge-optimized。对于区域端点,请求中不存在 CloudFront-*
header,除非您使用自己的 CloudFront 分配并将那些 header 列入白名单以转发到源。
当您在 API 网关中启用缓存时,
您还可以选择添加,
RequestPath
QueryStringParameters
Http Headers
例如,
http://example.com/api/{feature}/?queryparam=queryanswer [ with header customheader=value1 ]
以上 url 为您提供了缓存选项,
只有 URL 没有 PathParameters: http://example.com/api/
可选择包含 PathParameter:http://example.com/api/{feature}/
可选择包含 QueryString:http://example.com/api/{feature}/?queryparam=queryanswer
可选择包含 Http Headers:您可以包含常规 header,如 User-Agent 或自定义 headers
无论您在 API-Gateway 中使用何种缓存模式,您也可以在 CloudFront 中使用它。
还要清除缓存,在您的 http 响应中发送 Cache-Control:max-age=0
希望对您有所帮助。
我对 API Gateway 和 CloudFront 如何协同工作感到有点困惑。最终,我希望能够将自定义 header 和值视为我的缓存键的一部分。我知道这可以通过白名单来完成(如果我使用的是 CloudFront)。
所以当我提出以下请求时:
GET /pagesRead/4
Some-Header: fizz
这returns,例如,'29页'
然后有一个 post 将 id 4 更新为“45 页”
如果我提出这个要求
GET /pagesRead/4
Some-Header: buzz
现在return'45页'
但我使用的是 API 网关,它显然在幕后拥有自己的 CloudFront。有没有一种方法可以配置 API 网关以使用其 'behind-the-scenes' CloudFront 将我的自定义 header 列入白名单?这还需要做吗?
根据此文档:AWS-API-Gatway,似乎我可以在 API 网关 中启用 API 缓存,它会将我的 header 视为缓存键的一部分。
我理解正确吗?如果我只想让我的 headers 成为缓存键的一部分,那么 'Enabling API Caching' 和 [=57 之间有什么区别=] 网关并在 API 网关和 CloudFront 中的 white-listing 之上添加 CloudFront 实例?
更新:
我在 API 网关中添加了这样的 header:
但是在 GET 上,我从缓存中获取了过时的数据。
GET /pagesRead/4 test-header: buzz
区别在于 API 网关实际上并不使用 CloudFront 缓存。 CloudFront 确实为 所有 API 网关 APIs edge-optimized API 端点提供一些 front-end 服务,但缓存不似乎是其中之一,基于以下内容:
API Gateway enables caching by creating a dedicated cache instance.
...和...
You should not use the
X-Cache
header from the CloudFront response to determine if your API is being served from your API Gateway cache instance.https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-caching.html
可以在您创建的 CloudFront 分配后面级联边缘优化 API 网关端点,但这并非没有某些不便之处。延迟会有所增加,因为您要经过更多系统。考虑到该配置,CloudFront-Is-*-Viewer
和 CloudFront-Viewer-Country
header 以及客户端 IP 的任何概念都可能无效,因为 API 网关部署将看到额外的属性CloudFront 分布在它前面,而不是真正的客户端。 X-Forwarded-For
仍然是正确的,但必须小心处理,因为它将包含一个必须正确处理的额外跃点。
对于您想要将 API 网关置于您自己的 CloudFront 分配之后的应用程序,使用新的区域端点之一来部署您的 API 阶段。
it will consider my headers as part of the cache key.
您确实必须根据您引用的文档显式配置缓存键,但是 API 网关缓存随后将根据 header 的值缓存响应,并且缓存键中的其他属性。
¹ 边缘优化端点。 API 网关现在有 two different kinds of endpoints。原来的设计现在叫做 edge-optimized,新的选项叫做 regional。区域端点不使用来自 CloudFront 的 front-end 服务,并且在从同一 AWS 区域内的 EC2 访问时可能会提供较低的延迟。推出新的区域功能时,所有现有端点都被归类为 edge-optimized。对于区域端点,请求中不存在 CloudFront-*
header,除非您使用自己的 CloudFront 分配并将那些 header 列入白名单以转发到源。
当您在 API 网关中启用缓存时,
您还可以选择添加,
RequestPath
QueryStringParameters
Http Headers
例如,
http://example.com/api/{feature}/?queryparam=queryanswer [ with header customheader=value1 ]
以上 url 为您提供了缓存选项,
只有 URL 没有 PathParameters: http://example.com/api/
可选择包含 PathParameter:http://example.com/api/{feature}/
可选择包含 QueryString:http://example.com/api/{feature}/?queryparam=queryanswer
可选择包含 Http Headers:您可以包含常规 header,如 User-Agent 或自定义 headers
无论您在 API-Gateway 中使用何种缓存模式,您也可以在 CloudFront 中使用它。
还要清除缓存,在您的 http 响应中发送 Cache-Control:max-age=0
希望对您有所帮助。