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+jsonCloudflare 的全球网络可以使用 Gzip 压缩、Brotli 压缩、Zstandard 压缩或不压缩向网站访问者交付内容,具体取决于:
- 访问者在
accept-encoding请求标头中提供的值。 - 您的 Cloudflare 计划。
- 任何匹配传入请求的已配置的压缩规则。
对于具有错误状态代码的响应,Cloudflare 仅在错误状态代码为 403 或 404 时才会压缩响应。对于成功的响应状态代码,Cloudflare 仅在状态代码为 200 时才会压缩响应。具有其他状态代码的响应将不会被压缩。
您可以使用压缩规则覆盖 Cloudflare 的默认压缩行为。
当 Cloudflare 压缩发送给网站访问者的响应时,它可能会省略 Content-Length HTTP 标头,以避免传递由动态转换引起的错误长度信息。要保留源服务器设置的 Content-Length 标头,请在源服务器的响应中添加 cache-control: no-transform。该指令可防止 Cloudflare 更改对响应的压缩,从而允许按原样传递 Content-Length 标头。cache-control: no-transform 标头必须由源设置——它不能添加在客户端请求中。
从您的源服务器请求内容时,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标头,指明正在使用的压缩(br或gzip)。 - 访问者的浏览器(或客户端)支持该压缩算法。
- 您未启用更改响应内容的 Cloudflare 功能(有关详细信息,请参阅关于端到端压缩的说明)。
Cloudflare 的反向代理还可以在压缩格式和未压缩格式之间进行转换。Cloudflare 可以接收来自您源服务器的 Brotli 或 Gzip 压缩内容,并以未压缩形式提供给访问者(反之亦然),而与缓存无关。
如果您不希望从您的源发出的特定响应在传递给网站访问者时使用 Brotli/Gzip 进行编码,您可以在您的源 Web 服务器的响应中包含 cache-control: no-transform HTTP 标头来禁用此功能。
即使在整个链路(您的源服务器与 Cloudflare 之间,以及 Cloudflare 全球网络与网站访客之间)使用相同的压缩算法,只要您为该请求启用了以下任一设置,Cloudflare 就需要先解压响应内容,再重新压缩:
如需针对特定 URI 路径禁用这些设置,请创建配置规则。
Cloudflare 可能会移除发送给网站访客的响应中的 Content-Length HTTP 标头。若要确保该标头被保留,请在源服务器的响应中添加 cache-control: no-transform HTTP 标头。
默认情况下,Cloudflare 根据区域计划使用以下压缩方法进行内容交付。但是,实际应用的压缩也可能取决于访问者的浏览器通过 accept-encoding 标头请求的内容。
- Free 计划:默认情况下,内容使用 Zstandard 进行压缩。
- Pro 和 Business 计划:默认情况下,内容使用 Brotli 进行压缩。
- Enterprise 计划:默认情况下,内容使用 Gzip 进行压缩。
在所有计划中,Cloudflare 使用 accept-encoding: br, gzip 标头向源服务器请求内容。这意味着 Cloudflare 要求源使用 Brotli 或 Gzip 发送压缩后的内容,具体取决于源服务器支持哪种方法。