一、功能简介
注意:说明:
二、场景一:根据特定文件后缀开启内容压缩
若你需要针对域名 www.example.com 下的文件后缀 html、htm、xhtml 开启内容压缩,可参考以下步骤:
1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击网站安全加速内需配置的站点。
2. 在站点详情页面,单击站点加速,进入站点全局配置页面,单击规则引擎 Tab 页。
3. 在规则引擎页面,单击创建规则,选择新增空白规则。
4. 在规则编辑页面,匹配类型选择为 HOST 等于 www.example.com,同时设置文件后缀等于 html、htm、xhtml。
5. 单击操作 > 选择框,在弹出的操作列表内,选择操作为内容压缩。
三、场景二:根据特定文件 Content-Type 开启内容压缩
若你需要针对域名 www.example.com 下的文件 Content-Type: application/graphql+json 开启内容压缩,可参考以下步骤:
1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,进入服务总览,单击网站安全加速内需配置的站点。
2. 在站点详情页面,单击站点加速,进入站点全局配置页面,单击规则引擎 Tab 页。
3. 在规则引擎页面,单击创建规则,选择新增空白规则。
4. 在规则编辑页面,外层 IF 匹配类型选择为 HOST 等于 www.example.com,同时内层 IF 设置 HTTP 响应头名称为 Content-Type,值等于 application/graphql+json。
5. 单击操作 > 选择框,在弹出的操作列表内,选择操作为内容压缩。
四、内容压缩生效规则
1. 内容压缩支持的文件大小(Content-Length)范围:256B – 30MB。
2. 当源站响应为 Transfer-Encoding: chunked 时,由于数据以流式分块方式传输,EdgeOne 节点在接收完整响应前无法获知文件的总长度。受限于“256B – 30MB”的文件大小判断规则及性能考量,节点不会在同步传输过程中进行实时压缩,后续请求可以基于缓存的资源进行压缩。
3. 内容压缩为同步压缩,在回源获取文件同时压缩文件,首次请求压缩文件时节点可直接响应压缩后的文件。
4. 内容压缩将同时开启 Gzip 压缩和 Brotli 压缩,当客户端请求头 Accept-Encoding 同时携带有 br 和 gzip 时:
·如果节点内已有缓存内容,则按照如下规则响应:
·若节点同时有 Brotli 和 gzip 压缩的缓存内容,则优先响应 Brotli 压缩。
·若节点仅有 Brotli 压缩的缓存内容,则优先响应 Brotli 压缩。
·若节点仅有 gzip 压缩的缓存内容,则优先响应 Gzip 压缩。
·如果节点内未有缓存内容,则优先响应 Brotli 压缩。
5. 若源站开启了压缩功能,且服务端携带响应头:Content-Encoding,则内容压缩功能将不再生效。
6. 节点根据源站响应头中的 Content-Encoding 判断并缓存对应的压缩版本。因此,建议源站严格按照请求头 Accept-Encoding 返回相应编码。若请求未携带 Accept-Encoding,但源站仍返回了 gzip 内容,则该内容会被节点缓存为 gzip 版本。此后,对于同样不带 Accept-Encoding 的请求,由于节点中不存在非压缩版本的缓存,只能透传回源站处理。针对该场景,建议规范源站的压缩行为:当请求不含 Accept-Encoding 时,返回未压缩内容;或者关闭源站压缩,改由 EdgeOne 侧启用智能压缩。
五、请求示例
·未开启智能压缩&内容压缩
首次请求 gzip 压缩文件,未命中节点缓存,回源获取原文件并缓存至节点,EdgeOne 响应原文件:
·开启内容压缩
·首次请求 gzip 压缩文件,未命中节点缓存,回源获取文件,节点同步压缩并缓存压缩后的文件,EdgeOne 响应压缩文件:
·智能压缩支持 chunk 流式压缩,若请求未命中节点缓存,回源获取文件后会以 chunk 的方式响应。
·再次请求,命中节点 gzip 压缩文件的缓存,节点直接响应压缩文件。