Как отключить автоматический GZIP для ответа

Как я узнал из документации Spark, GZIP выполняется автоматически для ответа, если он содержит Content- Кодирование заголовка со значением gzip.

У меня есть следующий код:

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

Что делать, если byteArray уже сжат с помощью GZIP? Затем Spark еще раз сожмет его, и клиент получит мусор.

Есть ли способ ответить с помощью GZIP без автоматического сжатия Spark?


person Daniil Popov    schedule 20.03.2018    source источник


Ответы (2)


Есть ли способ ответить с помощью GZIP без автоматического сжатия Spark?

К сожалению нет. Вы можете написать свой ответ напрямую, используя средство записи в базовом файле HttpServletResponse.

post("/test", (req, res) -> { 
    res.raw().getWriter(); // do something with this writer 
    return "";
);

Хотя это некрасиво.

person tipsy    schedule 22.03.2018

Невозможно отказаться от автоматического сжатия Spark GZIP.

Один несколько гротескный обходной путь — обернуть InputStream в GZIPInputStream и вернуть его из метода вашего контроллера:

return new GZIPInputStream(myInputStream);

ОГРОМНОЕ ПРЕДОСТЕРЕЖЕНИЕ: это повлечет за собой трату циклов ЦП на то, что фактически не является операцией распаковки и повторной архивации потока, но, учитывая, что у Spark нет функции отказа, это может служить временным обходным решением.

Я призываю всех, кто сталкивается с этой проблемой, озвучить запрос функции в Spark 3 ветка запроса функции.

person skedastik    schedule 17.03.2020