在 Jetty 中为特定路径应用 GZipHandler

Apply GZipHandler in Jetty for specific paths

如何仅包含与 Jetty 9.4 中的 GZipHandler 模式匹配的特定路径。例如,我有一个请求映射到路径 /api/employees/{id}/payments。我只需要将 GZip 压缩应用于此路径。 Jetty 仅支持包含路径中的精确匹配或前缀 (/*) 或后缀 (*.)。我可以将 GZipHandler 配置为只压缩对路径 /api/employees/{id}/payments 的请求,例如 /api/employees/1/payments/api/employees/42/payments 等吗?

Jetty GzipHandler 支持标准 Servlet URL-Pattern 映射。

/api/employees/{id}/payments 的 "request mapping" 不是有效的 servlet url-pattern 字符串。

它看起来像一个 REST API 字符串,它完全在您的 REST 库中完成,没有真正涉及 servlet 规范或 servlet api。

与其尝试从路径(包含/排除)控制 GzipHandler,不如考虑设置它应该响应的 Mime-Type 映射。这样您就可以设置 /api/* 的包含路径,并让 mime-types 包含决定哪些内容应该压缩或不压缩。请记住,如果 http 客户端未指示它可以处理 gzip(它检查 AcceptAccept-Encoding 请求 headers),GzipHandler 将不会压缩,因此可以安全地进行转换更大的网。

同时考虑设置最小大小配置 setMinGzipSize(int) 以便 tiny/small 响应不会被不必要地压缩。