AWS Cloudfront 避免缓存特定查询字符串
AWS Cloudfront avoid caching particular querystring
我有以下端点:
- /订单
- /订单?status=打开
- /orders?status=open&my_orders=true
第三个示例使用 headers 来确定用户和 return 他们的特定项目。
显然,这是一个糟糕的 API 设计,但我们想要缓存前两个而不是第三个。可以将缓存策略修改为白名单或排除查询字符串参数,但根据我的理解,这不会有帮助。如果我们包含特定于用户的 header,则前 2 个 URI 将全部缓存在每个用户中。
是否有一个选项让我可以避免缓存第三个端点,同时仍然缓存前两个?另一种选择是缓存第三个,但在缓存键中包含用户特定的 headers。
如果您从缓存策略中排除 my_orders
查询字符串,CloudFront 将不会将该值包含在缓存键中。这意味着其他条件相同,这两个 URI 路径将共享相同的缓存键:
/orders?status=open
/orders?status=open&my_orders=true
这听起来不像是您想要的 - 您确实希望将带有 my_orders=true
的请求视为单独的缓存键,但您还需要考虑一个特定的请求 header,其中header 的值更改缓存键。如果是这种情况,您需要将请求 header 作为缓存键的一部分包含在内(这也将确保 CloudFront 将其传递到您的来源)
我有以下端点:
- /订单
- /订单?status=打开
- /orders?status=open&my_orders=true
第三个示例使用 headers 来确定用户和 return 他们的特定项目。
显然,这是一个糟糕的 API 设计,但我们想要缓存前两个而不是第三个。可以将缓存策略修改为白名单或排除查询字符串参数,但根据我的理解,这不会有帮助。如果我们包含特定于用户的 header,则前 2 个 URI 将全部缓存在每个用户中。
是否有一个选项让我可以避免缓存第三个端点,同时仍然缓存前两个?另一种选择是缓存第三个,但在缓存键中包含用户特定的 headers。
如果您从缓存策略中排除 my_orders
查询字符串,CloudFront 将不会将该值包含在缓存键中。这意味着其他条件相同,这两个 URI 路径将共享相同的缓存键:
/orders?status=open
/orders?status=open&my_orders=true
这听起来不像是您想要的 - 您确实希望将带有 my_orders=true
的请求视为单独的缓存键,但您还需要考虑一个特定的请求 header,其中header 的值更改缓存键。如果是这种情况,您需要将请求 header 作为缓存键的一部分包含在内(这也将确保 CloudFront 将其传递到您的来源)