设置 Cache-Control 标头后,GCP API 网关正在缓存响应

问题描述 投票:0回答:1

所有基础设施均位于 GCP 上。当我在由第二代云功能提供服务的端点上设置“Cache-Control: public, max-age=86400”响应标头时,API 网关正在缓存响应。当我更改端点以设置“Cache-Control: no-cache”响应标头时,尽管缓存标头发生了更改,API 网关仍继续返回原始响应。当我调用函数自己的端点时,我得到了正确的缓存标头值。

流程为:负载均衡器->API网关->云函数。 通过 LB 调用给出错误的 TTL 通过 API 网关调用给出错误的 TTL 直接调用Cloud Function给出正确的TTL

API 网关文档没有在任何地方提到缓存,负载均衡器没有启用缓存/CDN,并且考虑到 API 网关位于下游并且调用它会产生错误的 TTL,这似乎是源自 API 网关的问题。

重现步骤:

  1. 创建一个API网关,其端点以第二代云功能作为后端
  2. 云功能服务的端点应设置“Cache-Control: public, max-age=86400”
  3. 部署端点并验证响应包含“Cache-Control: public, max-age=86400”标头
  4. 部署对端点的更改,更改响应正文,并将“Cache-Control: public, max-age=86400”标头替换为“Cache-Control: no-cache”。
  5. 观察云函数直接 URL 的响应已更改为包含“Cache-Control: no-cache”标头,但 api 网关 URL 的响应仍然是旧响应,其中包含“Cache-Control: public, max-age=86400" 标头。

清除缓存的唯一方法是部署具有相同 api 规范的新网关。也许有一个可以调用的清除功能,我会热衷于探索这些选项。

google-cloud-platform caching google-cloud-run api-gateway google-api-gateway
1个回答
0
投票

尽管设置了

Cache-Control: no-cache
,API Gateway 似乎仍在缓存响应。发生这种情况是因为 API Gateway 默认情况下可能会缓存响应,即使
Cache-Control
标头建议不缓存。

  1. 在 API 网关中禁用缓存:

    • 转到 API Gateway 控制台并禁用端点缓存。
    • 您还可以在 API 网关设置中明确将缓存 TTL 设置为
      0
      no-cache
  2. 清除缓存

    • 如果需要,部署新版本的 API 以清除缓存。
    • 或者,使用
      gcloud
      CLI 清除缓存(如果支持):
    gcloud api-gateway apis update <API_ID> --clear-cache
    
  3. 确保 Cloud Function 标头正确:

    • 验证云函数在直接调用时是否设置了预期的
      Cache-Control
      标头。

通过调整API网关设置并清除缓存,您应该获得正确的响应TTL。

© www.soinside.com 2019 - 2024. All rights reserved.