本文介绍针对 HTTP (ZSDCH) 功能的基于 zstd 的共享字典压缩功能的企业注意事项。
基础结构注意事项在很大程度上也适用于由 Chromium 项目实现的压缩字典传输功能。 Microsoft Edge 119 及更高版本中的源试用机制,可以使用压缩字典传输功能。
什么是 ZSDCH?
ZSDCH 是 Microsoft Edge 中的一项实验性功能,它允许浏览器使用共享字典来解压缩通过 HTTPS 提供的响应。 当用户访问站点 (bing.com(例如,) 使用此功能)时,他们受益于通过降低服务器将页面发送回用户的带宽要求来提高性能。
压缩字典传输功能针对相同的方案,并以类似的方式工作。
ZSDCH 的工作原理是什么?
ZSDCH 的工作原理是让浏览器在“Accept-Encoding”请求标头中发送新值“zsdch”,以指示服务器浏览器支持 ZSDCH 压缩。
如果服务器希望将 ZSDCH 用于将来的响应,它将提供具有非 ZSDCH 内容编码但具有额外“get-dictionary”响应标头的典型响应。 此标头提供指向位置的指针,供浏览器提取 ZSDCH 字典以供将来使用。
浏览器提取并缓存字典后,将来向服务器发出的请求将在“avail-dictionary”标头中包含可用字典的列表。 如果服务器可以使用其中一个可用字典提供压缩的响应,它将使用该字典提供响应,并指定“zsdch”的“Content-Encoding”。
压缩字典传输功能的工作原理是什么?
同样,当压缩字典传输字典在请求期间在客户端上可用时,压缩字典传输播发其他“Accept-Encoding”请求标头值 (“sbr”和/或“zstd-d”) 以及“Sec-Available-Dictionary”请求标头。
正在测试这些功能的站点是什么?
为了验证性能提升和与各种网络拓扑的兼容性,Edge 在从 bing.com、bing.cn 和 msn.com 请求内容时播发 ZSDCH 支持。 Edge 还支持本地测试,方法是将其播发到具有“localhost”主机名的服务器。
压缩字典传输功能由各种网站(包括非Microsoft站点)使用 Origin 试用机制进行测试。
与网络中间框的潜在交互
某些企业使用提供缓存和/或网络流量检查功能的网络中间箱。 有时,这些产品要求它们可以分析响应;否则,它们可能会以中断页面的方式修改或阻止响应。
要求 Content-Encoding 是其理解的编码的中间框必须确保它们修改请求的 Accept-Encoding 标头值以删除不支持的编码。 否则,Web 服务器可能会选择提供中间框无法解码的响应。
对于不需要检查响应的缓存层,它们还必须正确支持“Vary”标头,以确保在“Vary”值中包含“avail-dictionary”和/或“sec-available-dictionary”标头名称的服务器响应得到正确处理,并且压缩响应不会返回到没有相应字典的客户端。
这些做法是通用的,也适用于浏览器支持的任何新的未来内容编码。
如果代理或中间框使用专用拦截证书解密 TLS 流量,则只能干扰 TLS 连接的压缩。
为了最大程度地降低不符合上述最佳做法的企业环境的风险,在检测到此类解密中间框时,Edge 会禁用 ZDSCH 功能。
对于压缩字典传输功能,提供了一个显式企业策略 (CompressionDictionaryTransportEnabled) 。 受影响的企业在与供应商合作更新产品以正确处理不熟悉的新内容编码时,可以使用策略禁用该功能。
验证 ZSDCH 是否在环境中导致问题
如果你认为 ZSDCH 在环境中导致了不需要的问题,可以通过以下步骤在 Edge 中禁用 ZSDCH:
- 打开
edge://flags
。 - 搜索“#edge-enable-zsdch-content-encoding”。
- 将该功能的值设置为“Disabled”。
- 重启 Edge,使更改生效。
- 运行遇到问题的方案,以确定该问题是否仍然存在或已解决。