启用动态压缩

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

缩减大小可加快样式表 (CSS)、脚本 (JavaScript) 和视频清单 (HLS/DASH) 等重要资源的下载速度,从而显著缩短网页加载和视频启动时间。

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

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

动态压缩的运作方式

启用动态压缩后,如果客户端接受某种受支持的压缩算法(brgzip),则从来源传送的可压缩内容可以在传送之前进行压缩。

Media CDN 会向所有符合压缩条件的响应添加 Vary: Accept-Encoding 标头。如需了解相关信息,请参阅不可压缩的内容

此外,如果请求的 Accept-Encoding 标头通过指定 brgzip(并可选地包含非零 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 标头设置为 brgzip,表示所选的压缩算法。

    Media CDN 会根据响应的预期压缩比率以及压缩速度或吞吐量选择最佳压缩算法。

    • 如果客户端支持 Brotli 压缩,则系统会使用 Brotli 压缩,即使其他压缩算法在 Accept-Encoding 标头中的 q 值更高也是如此。

    • HLS 清单仅使用 gzip 进行压缩。

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

配置动态解压缩

您可以在处理请求的路线上启用动态压缩。

准备工作

执行以下操作:

为路由规则启用动态压缩

默认情况下,路由规则的压缩模式处于停用状态。

将模式设置为自动后,系统会为每个符合条件的响应启用动态压缩。此外,它还会指示 Media CDN 自动选择最佳压缩算法。

如需启用动态压缩,请执行以下操作:

控制台

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

    前往“媒体 CDN”

  2. 如需打开要为其配置路线规则的服务的详情页面,请点击相应服务的名称。

  3. 如需切换到修改模式,请点击修改按钮。

  4. 如需前往路由部分,请点击下一步

  5. 如需修改主机规则,请点击箭头将其展开。

  6. 如需修改路线规则,请点击相应行中的 Edit(修改)。

  7. 修改路由规则窗格中,点击高级配置

  8. 可选:对于路由操作,添加 CDN 政策条目。

    借助 CDN 政策,Media CDN 只需将内容压缩一次即可进行多次传送,从而节省带宽并加快交付速度。

  9. 动态压缩部分,选择启用压缩

  10. 如需保存路线规则,请点击保存

  11. 如需保存对服务所做的更改,请点击更新服务

gcloud 和 YAML

  1. 将您的 Media CDN 配置导出为 YAML 文件。使用 gcloud edge-cache services export 命令

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    替换以下内容:

    • SERVICE_NAME:服务的名称
    • FILENAME:YAML 文件的名称
  2. 在 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
    
  3. 如需更新服务,请从 YAML 文件导入您的 Media CDN 配置。使用 gcloud edge-cache services import 命令

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

您的配置很快就会传播到所有边缘位置。

为某个路线启用动态压缩后,当新配置在生产机器中生效时,Media CDN 会开始压缩符合条件的响应,即使存在未压缩的缓存版本也是如此。在 Media CDN 提取和压缩新内容时,您源服务器的流量可能会暂时激增。

为路由规则停用动态压缩

如需停用动态压缩,请执行以下操作:

控制台

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

    前往“媒体 CDN”

  2. 如需打开要为其配置路线规则的服务的详情页面,请点击相应服务的名称。

  3. 如需切换到修改模式,请点击修改按钮。

  4. 如需前往路由部分,请点击下一步

  5. 如需修改主机规则,请点击箭头将其展开。

  6. 如需修改路线规则,请点击相应行中的 Edit(修改)。

  7. 修改路由规则窗格中,点击高级配置

  8. 动态压缩部分中,取消选中启用压缩

  9. 如需保存路线规则,请点击保存

  10. 如需保存对服务所做的更改,请点击更新服务

gcloud 和 YAML

  1. 将您的 Media CDN 配置导出到 YAML 文件。使用 gcloud edge-cache services export 命令

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    替换以下内容:

    • SERVICE_NAME:服务的名称
    • FILENAME:YAML 文件的名称
  2. 在 YAML 文件中的路线定义中,将 compressionMode 设置为 DISABLED

  3. 如需更新服务,请从 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-mpegURLapplication/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/*mpegURL
text/*

图片和视频格式(例如 image/jpegimage/pngvideo/mpeg4)几乎总是处于已压缩状态。因此,Media CDN 不会对其进行压缩。重新压缩已压缩过的响应通常不会再进一步减小该文件的大小,反而可能会导致客户端在收到此类响应时出现意外行为。

不可压缩的响应

媒体 CDN 不会压缩具有以下一个或多个特征的响应:

  • 响应没有与可压缩内容类型匹配的 Content-Type 标头。
  • 响应没有 Content-Length 标头。
  • 响应包含 Content-Encoding 标头。这意味着来源已压缩响应。因此,Media CDN 不得执行任何其他动态压缩。
  • 响应小于 1 KiB。

    在这种情况下,压缩和解压缩所花费的时间通常会抵消该操作所能带来的益处; 而且由于压缩内容极小,这也会导致压缩效率和压缩比降低。

  • 响应大于 1 MiB。

    媒体 CDN 会压缩响应,使其大小不超过缓存对象的允许大小,且不进行字节范围缓存。

  • 响应包含 Cache-Control: no-transform 标头。

  • 响应包含 Vary: Accept-Encoding 标头,这意味着不需要动态压缩,因为源服务器可以压缩响应。

日志记录和监控

启用压缩后,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 压缩响应,相关的出站缓存或互联网数据传输费用会根据发送到客户端的最终压缩字节数计算。

如果您传送大量可压缩响应,这会降低您的每月出站数据传输费用,并可提高最终用户的性能。

后续步骤