传送过时内容

本页面介绍如何使用 Cloud CDN 提供过时的过期内容。如果来源服务器无法访问或向 Cloud CDN 返回错误,Google Cloud 的全球缓存就可以继续传送内容。

这样做的原因如下:

  • 您希望向用户提供过时的内容,而不是向用户返回错误。
  • 如果缓存收到刚刚过期的内容的请求,提供过时内容可避免延迟。缓存无需等待后端的同步重新验证,而是提供刚刚过期的过时内容,同时在后台异步验证内容。

stale-while-revalidate 设置可在缓存条目过期期间从缓存中传送指定时间的现有内容(如果有)。

您可以设置 stale-while-revalidate HTTP 响应标头,以便从来源设置标头。

Cloud CDN 可以代表您设置 cdnPolicy.serveWhileStale 设置。此设置指定响应过期后 Cloud CDN 可继续提供过时版本的时间。默认情况下,此值为 86400s(1 天)。

serveWhileStale 设置将 stale-while-revalidatestale-if-error HTTP 缓存功能组合在一起。

默认值、最小值和最大值如下所示:

  • 默认值:86,400 秒(一天)
  • 最短:0 秒(停用此功能)
  • 最大:604,800 秒(一周)

过时内容可在缓存条目到期时间(由 max-ages-max-ageExpires 标头定义)后发送到指定限制。如需了解详情,请参阅过期时间和验证请求

如果 Cloud CDN 边缘缓存没有要传送的对象的缓存副本,或者该对象已达到过时的 TTL,则 Cloud CDN 会同步重新向来源验证内容。如果该起点返回错误,则 Cloud CDN 会返回源错误。

客户端 max-stale 请求指令

通过指定 max-stale 缓存控制指令,客户端可以缩短较短的服务时间。如果指定此指令,则此指令控制客户端容忍的过时数量。

如果缓存的内容晚于客户端的 max-stale 值,则 Cloud CDN 会在传送前重新验证该内容。

客户端无法请求 max-stale 值(大于通过 serve-while-stale 配置选项以及来自源的 stale-while-revalidate 缓存控制指令配置的值)。

准备工作

  • 了解缓存模式和静态内容

  • 确保已启用 Cloud CDN;如需了解相关说明,请参阅使用 Cloud CDN

  • 如有必要,请更新到 Cloud SDK 的最新版本:

    gcloud components update
    

在重新验证时提供过时内容

控制台

  1. 在 Google Cloud Console 中,转到负载平衡页面。

    转到“负载平衡”页面

  2. 点击外部 HTTP(S) 负载平衡器的名称。
  3. 点击修改
  4. 后端配置中,选择一个后端,然后点击修改
  5. 确保选择启用 Cloud CDN
  6. 在窗口底部,点击高级配置
  7. 在服务过时时提供下,选择以下选项之一:
    • 1 分钟
    • 5 分钟
    • 10 分钟
    • 30 分钟
    • 1 天(建议)
    • 7 天
  8. 点击更新
  9. 再次点击更新

gcloud

对于后端存储分区,请使用带有 --serve-while-stale 标志的 gcloud compute backend-buckets creategcloud compute backend-buckets update 命令。

对于后端服务,请使用带有 --serve-while-stale 标志的 gcloud compute backend-services creategcloud compute backend-services update 命令。

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --serve-while-stale=SECONDS
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --serve-while-stale=SECONDS

例如:

gcloud compute backend-services update my-backend-service
    --serve-while-stale=180s

API

对于后端存储分区,请使用 Method: backendBuckets.insertMethod: backendBuckets.update API 调用。

对于后端服务,请使用 Method: backendServices.insertMethod: backendServices.update API 调用。

使用以下 API 调用之一:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "serveWhileStale": SECONDS
}

停用提供过时内容的功能

控制台

  1. 在 Google Cloud Console 中,转到负载平衡页面。

    转到“负载平衡”页面

  2. 点击外部 HTTP(S) 负载平衡器的名称。
  3. 点击修改
  4. 后端配置中,选择一个后端,然后点击修改
  5. 确保未选中启用 Cloud CDN
  6. 在窗口底部,点击高级配置
  7. 在过时时提供下,选择在过时时停用服务
  8. 点击更新
  9. 再次点击更新

gcloud

对于后端存储分区,请使用 gcloud compute backend-buckets creategcloud compute backend-buckets update 命令并将 --serve-while-stale 标志值设置为 0

对于后端服务,请使用 gcloud compute backend-services creategcloud compute backend-services update 命令,并将 --serve-while-stale 标志值设置为 0

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --serve-while-stale=0

API

对于后端存储分区,请使用 Method: backendBuckets.insertMethod: backendBuckets.update API 调用。

对于后端服务,请使用 Method: backendServices.insertMethod: backendServices.update API 调用。

使用以下 API 调用之一:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "serveWhileStale": 0
}