所有基础设施均位于 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 网关的问题。
重现步骤:
清除缓存的唯一方法是部署具有相同 api 规范的新网关。也许有一个可以调用的清除功能,我会热衷于探索这些选项。
尽管设置了
Cache-Control: no-cache
,API Gateway 似乎仍在缓存响应。发生这种情况是因为 API Gateway 默认情况下可能会缓存响应,即使 Cache-Control
标头建议不缓存。
在 API 网关中禁用缓存:
0
或 no-cache
。清除缓存:
gcloud
CLI 清除缓存(如果支持):gcloud api-gateway apis update <API_ID> --clear-cache
确保 Cloud Function 标头正确:
Cache-Control
标头。通过调整API网关设置并清除缓存,您应该获得正确的响应TTL。