正如我从Spark documentation了解到的那样,如果GZIP包含带有 gzip 值的 Content-Encoding 标头,则会自动完成回复。
我有以下代码:
post("/test", (req, res) -> byteArray);
如果已使用GZIP压缩byteArray
怎么办?然后Spark会再次压缩它,客户端会收到垃圾。
有没有办法在没有Spark自动压缩的情况下使用GZIP进行响应?
答案 0 :(得分:2)
有没有办法在没有Spark自动压缩的情况下使用GZIP进行响应?
不幸的是没有。您可以使用基础HttpServletResponse
上的编写者直接编写您的回复。
post("/test", (req, res) -> {
res.raw().getWriter(); // do something with this writer
return "";
);
虽然不是很漂亮。
答案 1 :(得分:0)
不可能退出Spark的自动GZIP压缩。
一个怪异的解决方法是将InputStream包装在GZIPInputStream中,然后从您的控制器方法返回它:
return new GZIPInputStream(myInputStream);
巨大的注意事项::这将浪费CPU周期,实际上是无操作地解压缩和重新压缩流,但是鉴于Spark没有选择退出,它可以用作临时选项解决方法。
我鼓励遇到此问题的任何人在Spark 3 feature request thread中提出功能请求。