Fixed HttpHelloWorldServerHandler for handling HTTP 1.0/1.1 (#9124)
Motivation: HttpHelloWorldServer example works incorrect for HTTP 1.1, the value of header connection is always set to close for each request. Modification: Correctly set header Result: Fixed HttpHelloWorldServerHandler for handling HTTP 1.0/1.1
This commit is contained in:
parent
526f2da912
commit
a74fead216
@ -25,15 +25,14 @@ import io.netty.handler.codec.http.FullHttpResponse;
|
|||||||
import io.netty.handler.codec.http.HttpObject;
|
import io.netty.handler.codec.http.HttpObject;
|
||||||
import io.netty.handler.codec.http.HttpRequest;
|
import io.netty.handler.codec.http.HttpRequest;
|
||||||
import io.netty.handler.codec.http.HttpUtil;
|
import io.netty.handler.codec.http.HttpUtil;
|
||||||
import io.netty.handler.codec.http.HttpVersion;
|
|
||||||
|
|
||||||
import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION;
|
import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION;
|
||||||
import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_LENGTH;
|
import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_LENGTH;
|
||||||
import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_TYPE;
|
import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_TYPE;
|
||||||
import static io.netty.handler.codec.http.HttpHeaderValues.CLOSE;
|
import static io.netty.handler.codec.http.HttpHeaderValues.CLOSE;
|
||||||
import static io.netty.handler.codec.http.HttpHeaderValues.KEEP_ALIVE;
|
import static io.netty.handler.codec.http.HttpHeaderValues.KEEP_ALIVE;
|
||||||
|
import static io.netty.handler.codec.http.HttpHeaderValues.TEXT_PLAIN;
|
||||||
import static io.netty.handler.codec.http.HttpResponseStatus.OK;
|
import static io.netty.handler.codec.http.HttpResponseStatus.OK;
|
||||||
import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;
|
|
||||||
|
|
||||||
public class HttpHelloWorldServerHandler extends SimpleChannelInboundHandler<HttpObject> {
|
public class HttpHelloWorldServerHandler extends SimpleChannelInboundHandler<HttpObject> {
|
||||||
private static final byte[] CONTENT = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd' };
|
private static final byte[] CONTENT = { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd' };
|
||||||
@ -49,12 +48,16 @@ public class HttpHelloWorldServerHandler extends SimpleChannelInboundHandler<Htt
|
|||||||
HttpRequest req = (HttpRequest) msg;
|
HttpRequest req = (HttpRequest) msg;
|
||||||
|
|
||||||
boolean keepAlive = HttpUtil.isKeepAlive(req);
|
boolean keepAlive = HttpUtil.isKeepAlive(req);
|
||||||
FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(CONTENT));
|
FullHttpResponse response = new DefaultFullHttpResponse(req.protocolVersion(), OK,
|
||||||
response.headers().set(CONTENT_TYPE, "text/plain");
|
Unpooled.wrappedBuffer(CONTENT));
|
||||||
response.headers().setInt(CONTENT_LENGTH, response.content().readableBytes());
|
response.headers()
|
||||||
|
.set(CONTENT_TYPE, TEXT_PLAIN)
|
||||||
|
.setInt(CONTENT_LENGTH, response.content().readableBytes());
|
||||||
|
|
||||||
if (keepAlive && req.protocolVersion().equals(HttpVersion.HTTP_1_0)) {
|
if (keepAlive) {
|
||||||
|
if (!req.protocolVersion().isKeepAliveDefault()) {
|
||||||
response.headers().set(CONNECTION, KEEP_ALIVE);
|
response.headers().set(CONNECTION, KEEP_ALIVE);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Tell the client we're going to close the connection.
|
// Tell the client we're going to close the connection.
|
||||||
response.headers().set(CONNECTION, CLOSE);
|
response.headers().set(CONNECTION, CLOSE);
|
||||||
|
Loading…
Reference in New Issue
Block a user