[
https://issues.apache.org/jira/browse/KNOX-2622?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Larry McCay updated KNOX-2622:
------------------------------
Fix Version/s: (was: 1.5.0)
1.6.0
> Support Deflate Encoding for the Inbound Response
> -------------------------------------------------
>
> Key: KNOX-2622
> URL: https://issues.apache.org/jira/browse/KNOX-2622
> Project: Apache Knox
> Issue Type: Improvement
> Components: Server
> Affects Versions: 1.4.0
> Reporter: Zikun
> Priority: Major
> Fix For: 1.6.0
>
> Time Spent: 50m
> Remaining Estimate: 0h
>
> 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)