跳转到内容
搜索文档

内容压缩

最后更新 查看 MarkdownAgent 设置

Cloudflare 以两种方式压缩内容:在 Cloudflare 与您的网站访问者之间,以及在 Cloudflare 与您的源服务器之间。

Cloudflare 与网站访问者之间的压缩

除了 Cloudflare 的默认缓存行为外,Cloudflare 在向网站访问者交付内容时还支持 Gzip、Brotli 和 Zstandard 压缩。

如果访问者的 Web 浏览器支持,Cloudflare 将针对以下内容类型返回 Gzip、Brotli 或 Zstandard 编码的响应:

text/html
text/richtext
text/plain
text/css
text/x-script
text/x-component
text/x-java-source
text/x-markdown
application/javascript
application/x-javascript
text/javascript
text/js
image/x-icon
image/vnd.microsoft.icon
application/x-perl
application/x-httpd-cgi
text/xml
application/xml
application/rss+xml
application/vnd.api+json
application/x-protobuf
application/json
multipart/bag
multipart/mixed
application/xhtml+xml
font/ttf
font/otf
font/x-woff
image/svg+xml
application/vnd.ms-fontobject
application/ttf
application/x-ttf
application/otf
application/x-otf
application/truetype
application/opentype
application/x-opentype
application/font-woff
application/eot
application/font
application/font-sfnt
application/wasm
application/javascript-binast
application/manifest+json
application/ld+json
application/graphql+json
application/geo+json

Cloudflare 的全球网络可以使用 Gzip 压缩、Brotli 压缩、Zstandard 压缩或不压缩向网站访问者交付内容,具体取决于:

对于具有错误状态代码的响应,Cloudflare 仅在错误状态代码为 403404 时才会压缩响应。对于成功的响应状态代码,Cloudflare 仅在状态代码为 200 时才会压缩响应。具有其他状态代码的响应将不会被压缩。

您可以使用压缩规则覆盖 Cloudflare 的默认压缩行为。

Content-Length 标头处理

当 Cloudflare 压缩发送给网站访问者的响应时,它可能会省略 Content-Length HTTP 标头,以避免传递由动态转换引起的错误长度信息。要保留源服务器设置的 Content-Length 标头,请在源服务器的响应中添加 cache-control: no-transform。该指令可防止 Cloudflare 更改对响应的压缩,从而允许按原样传递 Content-Length 标头。cache-control: no-transform 标头必须由源设置——它不能添加在客户端请求中。


从源服务器到 Cloudflare 网络的内容压缩

从您的源服务器请求内容时,Cloudflare 支持 Brotli 压缩、Gzip 压缩或不压缩。

flowchart LR
accTitle: 发自源服务器的压缩响应
accDescr: Cloudflare 接受来自源服务器的响应,使用 Brotli 压缩、Gzip 压缩或不压缩。

A["访问者浏览器"]
B((Cloudflare))
C[("源服务器")]

A -.-> B == "请求<br>Accept-Encoding: br, gzip" ==> C
C == "响应<br>(Brotli / Gzip / 无压缩)" ==> B -.-> A

style A stroke-dasharray: 5 5
style B stroke: orange,fill: orange,color: black
style C stroke-width: 2px
linkStyle 1,2 stroke-width: 2px
linkStyle 0,3 stroke-width: 1px

如果您的源服务器使用 Brotli/Gzip 压缩来响应 Cloudflare 请求,我们将在发送给网站访问者的响应中保持相同的压缩,前提是:

  • 您在服务器响应中包含 content-encoding 标头,指明正在使用的压缩(brgzip)。
  • 访问者的浏览器(或客户端)支持该压缩算法。
  • 您未启用更改响应内容的 Cloudflare 功能(有关详细信息,请参阅关于端到端压缩的说明)。

Cloudflare 的反向代理还可以在压缩格式和未压缩格式之间进行转换。Cloudflare 可以接收来自您源服务器的 Brotli 或 Gzip 压缩内容,并以未压缩形式提供给访问者(反之亦然),而与缓存无关。

如果您不希望从您的源发出的特定响应在传递给网站访问者时使用 Brotli/Gzip 进行编码,您可以在您的源 Web 服务器的响应中包含 cache-control: no-transform HTTP 标头来禁用此功能。


端到端压缩注意事项

动态转换导致的内容重新压缩

即使在整个链路(您的源服务器与 Cloudflare 之间,以及 Cloudflare 全球网络与网站访客之间)使用相同的压缩算法,只要您为该请求启用了以下任一设置,Cloudflare 就需要先解压响应内容,再重新压缩:

如需针对特定 URI 路径禁用这些设置,请创建配置规则

Content-Length 标头

Cloudflare 可能会移除发送给网站访客的响应中的 Content-Length HTTP 标头。若要确保该标头被保留,请在源服务器的响应中添加 cache-control: no-transform HTTP 标头。

按计划划分的压缩方法

在访问者与 Cloudflare 之间

默认情况下,Cloudflare 根据区域计划使用以下压缩方法进行内容交付。但是,实际应用的压缩也可能取决于访问者的浏览器通过 accept-encoding 标头请求的内容。

  • Free 计划:默认情况下,内容使用 Zstandard 进行压缩。
  • Pro 和 Business 计划:默认情况下,内容使用 Brotli 进行压缩。
  • Enterprise 计划:默认情况下,内容使用 Gzip 进行压缩。

在 Cloudflare 与源服务器之间

在所有计划中,Cloudflare 使用 accept-encoding: br, gzip 标头向源服务器请求内容。这意味着 Cloudflare 要求源使用 Brotli 或 Gzip 发送压缩后的内容,具体取决于源服务器支持哪种方法。

这篇文档对您有帮助吗?