动态压缩会自动压缩 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 来源,请执行以下操作:
在 Google Cloud 控制台中,前往 Cloud CDN 来源页面。
点击要修改的来源名称,然后点击修改。
在来源基础信息部分中,点击下一步。
在主机和路径规则部分,点击下一步。
在缓存性能部分中,转到高级选项。
在压缩模式列表中,选择自动。
如需应用更改,请点击完成。
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 标头中指示所选压缩方法为 gzip 或 brotli。
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-mpegURL或application/vnd.apple.mpegURL - DASH 清单:
application/dash+xml
下表汇总了 MIME 类型对可压缩性的影响。
| 可压缩的 MIME 类型 | |
|---|---|