|
|
|
@ -112,8 +112,7 @@ public class HttpRequestHandler extends SimpleChannelInboundHandler<FullHttpRequ
|
|
|
|
|
response = createResponse(request, HttpResponseStatus.INTERNAL_SERVER_ERROR, "Server error");
|
|
|
|
|
}
|
|
|
|
|
if (!isFileResponseFinished) {
|
|
|
|
|
ctx.write(response);
|
|
|
|
|
ChannelFuture future = ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
|
|
|
|
|
ChannelFuture future = writeResponse(ctx, response);
|
|
|
|
|
future.addListener(ChannelFutureListener.CLOSE);
|
|
|
|
|
//reuse http api response buf
|
|
|
|
|
if (isHttpApiResponse && response instanceof DefaultFullHttpResponse) {
|
|
|
|
@ -130,6 +129,20 @@ public class HttpRequestHandler extends SimpleChannelInboundHandler<FullHttpRequ
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private ChannelFuture writeResponse(ChannelHandlerContext ctx, HttpResponse response) {
|
|
|
|
|
// try to add content-length header for DefaultFullHttpResponse
|
|
|
|
|
if (!HttpUtil.isTransferEncodingChunked(response)
|
|
|
|
|
&& response instanceof DefaultFullHttpResponse) {
|
|
|
|
|
response.headers().set(HttpHeaderNames.CONTENT_LENGTH,
|
|
|
|
|
((DefaultFullHttpResponse) response).content().readableBytes());
|
|
|
|
|
return ctx.writeAndFlush(response);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//chunk response
|
|
|
|
|
ctx.write(response);
|
|
|
|
|
return ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private HttpResponse readFileFromResource(FullHttpRequest request, String path) throws IOException {
|
|
|
|
|
DefaultFullHttpResponse fullResp = null;
|
|
|
|
|
InputStream in = null;
|
|
|
|
|