掘金 后端 ( ) • 2024-04-08 13:23

第四十六章 压缩对 CSP 表单请求的响应 (GZIP ZLIB) - 使用 GZIP ZLIB 库

使用 GZIP ZLIB 库

Web 网关使用 ZLIB 库实现两种压缩响应数据的操作模式(12):

  1. 在此模式下,Web 网关将从 IRIS 接收到的所有数据传输到压缩器中。处理完所有数据后,压缩器会将压缩数据流回 Web 网关,然后将其转发到客户端。

    此模式提供最佳的压缩效果,但延迟稍高。当然,对于较大的形式,延迟更为明显。

  2. 在此模式下,Web 网关将从 IRIS 接收到的所有数据传输到压缩器中。在每次调用中,压缩器都会生成尽可能多的压缩数据供 Web Gateway 使用,然后将其转发到客户端。

    此模式提供尽可能低的延迟,但会稍微降低压缩级别。当然,对于较大的形状,压缩程度的降低更为明显。一般来说,模式 2 更适合通常无法提前知道响应包含多少数据的 Web 应用程序。

如果(且仅当)Web 网关能够成功压缩从 IRIS 返回的数据流,它就会修改 HTTP 响应标头以包含适当的内容编码指令。例如:

HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: CSPSESSIONID=000000000002119qMwh3003228403243; path=/csp/samples/;
Cache-Control: no-cache 
Connection: Close 
Date: <date and time>
Expires: <date and ttime>
Pragma: no-cache 
Content-Encoding: gzip

在尝试压缩响应数据之前,Web Gateway 始终检查 Accept-Encoding HTTP 请求标头(HTTP_ACCEPT_ENCODING CGI 环境变量)的值。仅当客户端指示其能够处理压缩内容时,Web 网关才会压缩响应。

示例:

Accept-Encoding: gzip, deflate

有多种方法可以指定应压缩 CSP 响应。这些将在以下各节中讨论。

指定单个页面的压缩

Web 应用程序中,%response 对象包含一个名为 GzipOutput 的属性。如果此属性设置为 true(或所需的模式),Web Gateway 将尝试压缩响应。

<script language=objectscript method=OnPreHTTP arguments=""
         returntype=%Boolean>
         Set %response.GzipOutput = 2
         Quit 1
</script> 

还可以通过将 CSP-gzip 指令添加到 HTTP 响应标头来按页指定压缩。当然,这必须在 OnPreHTTP 方法中完成。例如:

<script language=objectscript method=OnPreHTTP arguments="" 
        returntype=%Boolean> 
        Do %response.SetHeader("CSP-gzip", "2") 
        Quit 1 
</script>

CSP-gzip 标头指令应设置为所需的压缩模式(12)。

指定应用程序路径中所有页面的压缩

可以基于每个应用程序路径指定压缩。顺便说一句,这是指示在使用 Web 服务器输出过滤器(例如 mod_deflate)时应使用压缩的最常见方法。

Web 网关应用程序访问部分使用以下配置参数:

  • GZIP Compression - 如果启用,该路径的所有 CSP 输出都会被压缩。默认为启用。
  • GZIP Minimum File Size - 控制激活压缩的最小响应大小(以字节为单位)。如果留空,则启用 GZIP 的所有响应都会被压缩。
  • GZIP Exclude File Types - 要从 GZIP 压缩中排除的文件类型列表。文件可以按 MIME 类型(例如 image/jpeg)或通用扩展名(例如 jpeg)列出。默认情况下,排除这些常见(本机压缩)图像文件:GZIP 排除文件类型:jpeg gif ico png gz zip mp3 mp4 tiff。用空格分隔附加类型或扩展。

监控

日志级别 V3 指示 Web Gateway 记录所有成功压缩的响应所达到的压缩程度。记录压缩数据和原始未压缩数据流的大小。

示例:

GZIP Compression for /csp/samples/inspector.csp 
GZIP Mode=1; Uncompressed Content Size=19042; Compressed Content Size=2499 (13 percent)