[
https://issues.apache.org/jira/browse/KNOX-2622?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Zikun updated KNOX-2622:
------------------------
Summary: Support Deflate Encoding for the Inbound Response (was: Support
Deflated in-bound Response)
> Support Deflate Encoding for the Inbound Response
> -------------------------------------------------
>
> Key: KNOX-2622
> URL: https://issues.apache.org/jira/browse/KNOX-2622
> Project: Apache Knox
> Issue Type: New Feature
> Components: Server
> Affects Versions: 1.4.0
> Reporter: Zikun
> Priority: Major
> Fix For: 1.5.0
>
>
> Currently, Knox only supports the Content-Encoding "gzip" and the
> Content-Encoding "deflate" is not supported. When the upstream server (such
> as Livy 0.7 Server) returns a response which is deflated, Knox does not know
> how to decode it.
>
> This is the part of logic that needs to be improved.
>
> final InputStream inStream;
> final OutputStream outStream;
> if( filter != null ) {
> // Use this way to check whether the input stream is gzip compressed,
> in case
> // the content encoding header is unknown, as it could be unset in
> inbound response
> boolean isGzip = false;
> final BufferedInputStream inBuffer = new BufferedInputStream(input,
> STREAM_BUFFER_SIZE);
> inBuffer.mark(2);
> byte [] signature = new byte[2];
> int len = inBuffer.read(signature);
> if( len == 2 && signature[ 0 ] == (byte) 0x1f && signature[ 1 ] ==
> (byte) 0x8b ) {
> isGzip = true;
> }
> inBuffer.reset();
>
> final InputStream unFilteredStream;
> if(isGzip) {
> unFilteredStream = new GzipCompressorInputStream(inBuffer, true);
> } else {
> unFilteredStream = inBuffer;
> }
> String charset = MimeTypes.getCharset( mimeType,
> StandardCharsets.UTF_8.name() );
> inStream = filter.filter( unFilteredStream, charset, rewriter, this,
> UrlRewriter.Direction.OUT, filterContentConfig );
> outStream = (isGzip) ? new GZIPOutputStream(output, STREAM_BUFFER_SIZE)
> : output;
> } else {
> inStream = input;
> outStream = output;
> }
>
> The above code only considers the "gzip" format and the "deflate" format is
> not considered. We should also handle the case when the format is "deflate"
> and use InflaterInputStream to read the in-bound response and use
> DeflaterOutputStream to write the out-bound response.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)