diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpUtil.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpUtil.java index 8e04b10db6..ff3c4d9a49 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpUtil.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpUtil.java @@ -65,16 +65,9 @@ public final class HttpUtil { * {@link HttpVersion#isKeepAliveDefault()}. */ public static boolean isKeepAlive(HttpMessage message) { - CharSequence connection = message.headers().get(HttpHeaderNames.CONNECTION); - if (HttpHeaderValues.CLOSE.contentEqualsIgnoreCase(connection)) { - return false; - } - - if (message.protocolVersion().isKeepAliveDefault()) { - return !HttpHeaderValues.CLOSE.contentEqualsIgnoreCase(connection); - } else { - return HttpHeaderValues.KEEP_ALIVE.contentEqualsIgnoreCase(connection); - } + return !message.headers().containsValue(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE, true) && + (message.protocolVersion().isKeepAliveDefault() || + message.headers().containsValue(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE, true)); } /** diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpUtilTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpUtilTest.java index 31596067ae..55bbe992d0 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpUtilTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpUtilTest.java @@ -317,4 +317,25 @@ public class HttpUtilTest { "http:localhost/http_1_0"); assertFalse(HttpUtil.isKeepAlive(http10Message)); } + + @Test + public void testKeepAliveIfConnectionHeaderMultipleValues() { + HttpMessage http11Message = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, + "http:localhost/http_1_1"); + http11Message.headers().set( + HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE + ", " + HttpHeaderValues.CLOSE); + assertFalse(HttpUtil.isKeepAlive(http11Message)); + + http11Message.headers().set( + HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE + ", Close"); + assertFalse(HttpUtil.isKeepAlive(http11Message)); + + http11Message.headers().set( + HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE + ", " + HttpHeaderValues.UPGRADE); + assertFalse(HttpUtil.isKeepAlive(http11Message)); + + http11Message.headers().set( + HttpHeaderNames.CONNECTION, HttpHeaderValues.UPGRADE + ", " + HttpHeaderValues.KEEP_ALIVE); + assertTrue(HttpUtil.isKeepAlive(http11Message)); + } }