动态压缩会自动压缩 Media CDN 传送的响应。 通常,通过网络发送的数据大小会减少 60% 到 85% 。
数据大小的减少会加快样式表 (CSS)、脚本 (JavaScript) 和视频清单 (HLS/DASH) 等重要资源的下载速度,从而显著缩短网页加载和视频启动时间。
大型实时视频播放列表(清单)包含大量重复数据和提取,这包括每个片段的主机和路径前缀,以及 HLS 或 DASH 播放列表元数据。加载播放列表或下载播放列表更新的速度越快,客户端等待解析和开始下载引用的视频片段的时间就越少。HLS 和 DASH 播放列表的总大小通常会减少 90% 以上。
如需详细了解压缩响应所能带来的益处,请参阅 网站开发基础 指南。
动态压缩的运作方式
启用动态压缩后,如果
客户端接受其中一种受支持的压缩算法(br 或 gzip),则在传送来自源站的可压缩内容
之前,系统可以对其进行压缩。
Media CDN 会向所有符合压缩条件的响应添加 Vary: Accept-Encoding 标头。如需了解相关信息,请参阅
不可压缩的内容。
此外,如果请求的 Accept-Encoding 标头通过指定 br 或 gzip(并可以选择性地包含非零 q 参数)来表明偏好压缩内容,则
Media CDN 会执行以下操作:
从响应中移除
Content-Length标头;这是必要的,因为在整个响应被压缩之前,完整的内容长度是未知的,因此需要尽快传送响应。 对于 HTTP/1.1 及更早版本,Media CDN 不使用Content-Length时会在响应中使用Transfer-Encoding: chunked。响应被压缩和缓存后,Media CDN 可以在后续响应中包括
Content-Length标头,并将该值设置为压缩后的正文内容的长度。将
Accept-Ranges设置为none。这会通知客户端,系统会忽略对此资源发出的范围请求。根据 RFC 9110 第 8.8.3节的要求,弱化任何强
ETag响应标头。例如,ETag: "xyzzy"会被替换为ETag: W/"xyzzy"。将
Content-Encoding标头设置为br或gzip,这表示所选的压缩算法。Media CDN 会根据响应的预期压缩比以及压缩速度或吞吐量选择最佳压缩算法。
如果客户端支持 Brotli 压缩,即使其他压缩算法在
Accept-Encoding标头中具有更高的q值,系统也会使用 Brotli 压缩。HLS 清单仅使用
gzip进行压缩。
Media CDN 会确定合适的压缩级别,以在客户端的下载总量和 CPU 费用之间进行平衡。并不总是压缩级别越高性能便越好,尤其是在功耗较低的移动设备上。
配置动态压缩
您可以在传送请求的路由上启用动态压缩。
准备工作
执行以下操作:
确定或 创建 Media CDN 源站 ,该源站具有 可压缩内容 且已准备好传送。
为路由规则启用动态压缩
默认情况下,路由规则的压缩模式处于停用状态。
将模式设置为“自动”可为每个符合条件的响应启用动态压缩。此外,它还会指示 Media CDN 自动选择最佳压缩算法。
如需启用动态压缩,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Media CDN 页面。
如需打开要为其配置路由规则的服务的详情 页面,请点击服务名称。
如需切换到修改模式,请点击修改 按钮。
如需前往路由 部分,请点击下一步 。
如需修改主机规则,请点击箭头将其展开。
如需修改路由规则,请点击相应行中的 “修改”图标。
在修改路由规则 窗格中,点击高级配置 。
可选:对于路由操作 ,添加CDN 政策 项。
借助 CDN 政策,Media CDN 可以将内容压缩一次并传送多次,从而节省带宽并加快传送速度。
在动态压缩 部分中,选择启用压缩 。
如需保存路由规则,请点击保存 。
如需将更改保存到服务,请点击更新服务 。
gcloud 和 YAML
将 Media CDN 配置 导出到 YAML 文件。使用
gcloud edge-cache services export命令。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml替换以下内容:
SERVICE_NAME:服务的名称FILENAME:YAML 文件的名称
在 YAML 文件中的路由定义内,在
routeAction下,将compressionMode设置为AUTOMATIC,如以下示例所示:routing: hostRules: - hosts: - media.example.com pathMatcher: routes pathMatchers: - name: routes routeRules: - priority: 2 origin: origin1 matchRules: - pathTemplateMatch: "/**.m3u8" # HLS playlists - pathTemplateMatch: "/**.mpd" # DASH manifests routeAction: cdnPolicy: defaultTtl: 5s compressionMode: AUTOMATIC如需更新服务,请从 YAML 文件 导入 Media CDN 配置。使用
gcloud edge-cache services import命令。gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
Terraform
以下 Terraform 代码段显示了已启用动态压缩的路由规则。
您的配置很快就会传播到所有边缘位置。
为路由启用动态压缩且新配置在生产机器中生效后,即使存在未压缩的缓存版本,Media CDN 也会开始压缩符合条件的响应。在 Media CDN 提取和压缩新内容时,您源站的流量可能会暂时出现峰值。
为路由规则停用动态压缩
如需停用动态压缩,请执行以下操作:
控制台
在 Google Cloud 控制台中,前往 Media CDN 页面。
如需打开要为其配置路由规则的服务的详情 页面,请点击服务名称。
如需切换到修改模式,请点击修改 按钮。
如需前往路由 部分,请点击下一步 。
如需修改主机规则,请点击箭头将其展开。
如需修改路由规则,请点击相应行中的 “修改”图标。
在修改路由规则 窗格中,点击高级配置 。
在动态压缩 部分中,取消选择启用压缩 。
如需保存路由规则,请点击保存 。
如需将更改保存到服务,请点击更新服务 。
gcloud 和 YAML
将 Media CDN 配置 导出到 YAML 文件。使用
gcloud edge-cache services export命令。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml替换以下内容:
SERVICE_NAME:服务的名称FILENAME:YAML 文件的名称
在 YAML 文件中的路由定义内,将
compressionMode设置为DISABLED。如需更新服务,请从 YAML 文件 导入 Media CDN 配置。使用
gcloud edge-cache services import命令。gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
如果您在特定路由的动态压缩方面遇到问题,例如与某些客户端(例如智能电视或流媒体设备)的兼容性问题,如需阻止 Media CDN 在该路由上传送压缩内容,请停用动态压缩。
为路由停用动态压缩会导致 Media CDN 停止从缓存传送压缩内容。所有之前缓存的压缩响应都会失效,CDN 会从您的源站提取未压缩的版本。
可压缩内容类型
根据 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 类型 | |
|---|---|
| 完全匹配 |
application/csv application/javascript application/json application/json+protobuf application/signed-exchange application/wasm application/x-javascript application/x-nacl application/x-plist application/x-pnacl application/x-protobuf application/x-protobuffer application/x-sdch-dictionary application/xml audio/mpeg网址 font/eot font/otf font/ttf image/pwg-raster image/svg+xml image/vnd.microsoft.icon image/x-icon video/vnd.mpeg.dash.mpd |
| 模式匹配 | application/*+json application/*+xml application/*mpeg网址 text/* |
图片和视频格式(例如 image/jpeg、image/png 和 video/mpeg4)几乎总是处于已压缩状态。因此
Media CDN
不会对其进行压缩。重新压缩已压缩过的响应通常不会再进一步减小该文件的大小,反而可能会导致客户端在收到此类响应时出现意外行为。
不可压缩的响应
Media CDN 不会压缩具有以下一个或多个特征的响应:
- 响应没有与
Content-Type标头匹配的 可压缩内容类型。 - 响应没有
Content-Length标头。 - 响应具有
Content-Encoding标头。这意味着源站已压缩响应。因此,Media CDN 不得进行任何额外的动态压缩。 响应小于 1 KiB。
在这种情况下,压缩和解压缩所花费的时间通常会抵消该操作所能带来的益处; 而且由于压缩内容极小,这也会导致压缩效率和压缩比降低。
响应大于 1 MiB。
Media CDN 会压缩响应,直到达到允许缓存对象而不进行字节范围缓存的大小。
响应具有
Cache-Control: no-transform标头。
日志记录和监控
启用压缩后,edgecache.googleapis.com/EdgeCacheRouteRule 下的现有 https/response_bytes_count
指标会报告压缩后的响应大小。预计可压缩内容的响应字节总数和出站数据传输吞吐量会下降。
Media CDN 日志在 jsonPayload 中包含一个 compressionAlgorithmApplied
字段,该字段指示响应是否已被负载均衡器压缩以及相应的压缩类型。
{
insertId: "1c02hw9g3gjay67"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
cacheId: "IAD-862d661f",
cacheStatus": "hit,stale",
compressionAlgorithmApplied: "br"
},
}
结算
如果通过 Media CDN 压缩响应,相关的出站缓存或互联网数据传输费用将根据发送到客户端的最终压缩字节数计算。
如果您传送大量可压缩响应,这会降低每月出站数据传输费用,并为最终用户提高性能。