启用动态压缩

动态压缩会自动压缩 Cloud CDN 传送的响应。通常,通过网络发送的数据大小会减少 60% 到 85%

这种大小上的缩减也会缩短下载内容所需花费的时间。对于样式表 (CSS)、脚本 (JavaScript) 和视频清单 (HLS/DASH) 等重要资源,这样可以缩短网页加载和视频启动时间。

如需详细了解压缩响应所能带来的益处,请参阅网站开发基础指南

您可以在后端服务或后端存储桶上启用压缩。

实际使用示例

动态压缩直接减小了从 Cloud CDN 边缘发送到客户端的数据的大小。这将直接带来以下益处:

  • 减小 CSS 和 JavaScript 内容的大小,帮助网页更快地呈现,并缩短首次内容渲染(一个重要的网页性能指标)的时间。
  • 缓存 REST API 响应(例如 JSON 载荷)时优势明显。由于存在重复的键、空格和大括号,因此这些载荷能够很好地进行压缩。将公共 API 缓存 5 到 10 秒是现在的一种流行做法,可以在减少来源负载的同时保持数据新鲜度。

    即使没有进行这样的缓存,通过压缩这些响应也可以将发送的总字节数减少高达 90%。

  • 缩短视频分发的播放启动时间和直播的加入延迟时间。大型实时播放列表(清单)包含大量重复数据,这包括每个片段的主机 + 路径前缀,以及 HLS 或 DASH 播放列表元数据。加载播放列表或下载播放列表更新的速度越快,客户端等待解析和开始下载引用的视频片段的时间就越少。HLS 和 DASH 播放列表的总大小通常会缩减 90% 以上。

须知事项

确保您满足以下要求:

  • 配置了启用 Cloud CDN 的后端。如果您尚未配置 Cloud CDN,则可以按照设置指南之一执行操作。
  • 您的后端具有可供传送的可压缩内容,例如介于 1 KiB 到 10 MiB(含边界值)之间的 Web 资源或视频清单。
  • 客户端不依赖于使用范围请求强 ETag 提取部分内容。动态压缩不支持这些特性。
  • 客户端可以处理没有 Content-Length 标头的响应。例如,Cloud CDN 压缩的缓存未命中没有 Content-Length 标头。
  • 您拥有更改后端配置所需的 IAM Compute Load Balancer Admin 角色 (roles/compute.loadBalancerAdmin)。

在后端服务或后端存储桶上启用压缩

如需启用压缩,请按照以下步骤操作。

控制台

添加新源站

如需添加和设置新源站,请按照设置概览中适当类型的后端的说明进行操作。创建源站时,请使用高级选项部分在压缩模式列表中选择自动,以配置动态压缩。

修改现有源站

如需修改现有 Cloud CDN 来源,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud CDN 来源页面。

    前往源站

  2. 点击要修改的来源名称,然后点击修改

  3. 来源基础信息部分中,点击下一步

  4. 主机和路径规则部分,点击下一步

  5. 缓存性能部分中,转到高级选项

  6. 压缩模式列表中,选择自动

  7. 如需应用更改,请点击完成

gcloud

对于后端服务,请使用带有 --compression-mode 标志的 gcloud compute backend-services create 命令gcloud compute backend-services update 命令

对于后端存储桶,请将 gcloud compute backend-buckets create 命令gcloud compute backend-buckets update 命令--compression-mode 标志结合使用。

对于新的后端服务,请使用 create 命令:

gcloud compute backend-services create BACKEND_SERVICE_NAME \
    --compression-mode=AUTOMATIC

对于现有后端服务,请使用 update 命令:

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --compression-mode=AUTOMATIC

对于新的后端存储桶,请使用 create 命令:

gcloud compute backend-buckets create BACKEND_BUCKET_NAME
    --compression-mode=AUTOMATIC

对于现有后端存储桶,请使用 update 命令:

gcloud compute backend-buckets update BACKEND_BUCKET_NAME
    --compression-mode=AUTOMATIC

compression-mode 可以是下列选项之一:

  • AUTOMATIC:根据客户端发送的 Accept-Encoding 标头自动使用最佳压缩。在大多数情况下,优先采用 Brotli 压缩。
  • DISABLED(默认):停用压缩。

API

对于后端服务,请使用 backendServices.insert 方法backendServices.update 方法

对于后端存储桶,请使用 backendBuckets.insert 方法backendBuckets.update 方法

请使用以下命令之一:

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
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

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

"compressionMode": AUTOMATIC

compression-mode 可以是下列选项之一:

  • AUTOMATIC(推荐):根据客户端发送的 Accept-Encoding 标头自动使用最佳压缩。在大多数情况下,优先采用 Brotli 压缩。
  • DISABLED(默认):停用压缩。

您的配置会在几分钟内传播到所有边缘位置。从后端传送的可压缩内容在传送给客户端之前会被压缩。

压缩模式

默认压缩模式为 DISABLED

AUTOMATIC 模式允许 Cloud CDN 根据以下内容选择最佳压缩方法:

  • 客户端接受的编码
  • 响应的预期压缩比
  • Cloud CDN 的压缩速度(吞吐量)

与 gzip 相比,Brotli 可将大多数内容类型的下载大小再减少 10% 到 20%,并且具有类似的解压缩性能,如果考虑客户端上的下载时间和压缩速度,那么 Brotli 的整体速度较快

Cloud CDN 在响应的 Content-Encoding 标头中指示所选压缩方法为 gzipbrotli

Cloud CDN 会确定合适的压缩级别,以在客户端的下载总量和 CPU 费用之间进行平衡。并不总是压缩级别越高性能便越好,尤其是在功耗较低的移动设备上。

当 Cloud CDN 最初压缩内容时,它会从响应中移除 Content-Length 标头;这对于尽快传送响应是必要的,因为在完整响应被压缩之前,完整的内容长度是未知的。响应被压缩和缓存后,Cloud CDN 可能会在后续响应中包括 Content-Length 标头。(对于 HTTP/1.1 及更早版本,Cloud CDN 不使用 Content-Length 时会在响应中使用 Transfer-Encoding: chunked。)

响应何时会被压缩?

如果请求的 Accept-Encoding 标头明确列出了对 gzip 或 Brotli 算法的支持,则从后端(源)传送的未压缩响应(具有与可压缩内容类型匹配的 Content-Type 标头)将相应地使用 gzip 或 Brotli 进行压缩。如果请求没有 Accept-Encoding 标头,或者具有 Accept-Encoding: *,则响应不会被压缩。

例如,如果客户端请求中有 Accept-Encoding 标头,则会根据下表中的信息压缩(或不压缩)响应:

Accept-Encoding 请求标头 响应编码
gzip, compress, br Brotli (br)
deflate 不压缩
deflate, gzip gzip
identity 不压缩
* 不压缩

可压缩内容类型

根据 Content-Type HTTP 响应标头,动态压缩会应用于以下 MIME 类型。没有 Content-Type 响应标头的响应不会被压缩。

常见的内容类型及其 MIME 类型如下:

  • HTML 内容:text/html
  • 样式表:text/css
  • JavaScript:application/javascript
  • JSON:application/json
  • HLS 播放列表:application/x-mpegURLapplication/vnd.apple.mpegURL
  • DASH 清单:application/dash+xml

下表汇总了 MIME 类型对可压缩性的影响。

  可压缩的 MIME 类型