如何禁用自动 GZIP 响应

How to disable automatic GZIP for response

正如我从 Spark documentation 中了解到的那样,如果 GZIP 包含 Content-Encoding header 且值为 [=21],则会自动完成响应=]gzip.

我有以下代码:

post("/test", (req, res) -> byteArray);

如果 byteArray 已经用 GZIP 压缩了怎么办?然后 Spark 将再次压缩它,客户端将收到垃圾。

有什么方法可以在没有 Spark 的情况下使用 GZIP 进行响应 auto-compression?

Is there any way to response with GZIP without Spark auto-compression?

不幸的是没有。您可以使用底层 HttpServletResponse.

上的编写器直接编写您的回复
post("/test", (req, res) -> { 
    res.raw().getWriter(); // do something with this writer 
    return "";
);

虽然不好看

无法选择退出 Spark 的自动 GZIP 压缩。

一个有点古怪的解决方法是将 InputStream 包装在 GZIPInputStream 中,然后 return 来自您的控制器方法:

return new GZIPInputStream(myInputStream);

巨大的警告: 这将浪费 CPU 周期在什么实际上是解压缩和重新压缩流的空操作上,但考虑到 Spark 没有选择退出它可以作为临时解决方法。

我鼓励 运行 关注此问题的任何人在 Spark 3 feature request thread 中提出功能请求。