From 183559ddb6e1de1c78659460a49a9e6e7d92d2a1 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Mon, 26 Apr 2021 16:28:35 +0900 Subject: [PATCH] Add a new HTTP/2 pseudo header `:protocol` (#11192) Motivation: RFC 8411 defines a new HTTP/2 pseudo header called `:protocol`: - https://datatracker.ietf.org/doc/rfc8441/ Netty currently raises an exception when validating an `Http2Headers`. Modifications: - Added `Http2Headers.PseudoHeaderNames.PROTOCOL` so that `:protocol` pseudo header is not rejected. Result: - A user can implement WebSockets with HTTP/2. --- .../java/io/netty/handler/codec/http2/Http2Headers.java | 8 +++++++- .../handler/codec/http2/DefaultHttp2HeadersTest.java | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2Headers.java b/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2Headers.java index 1a91de58de..fde3126c11 100644 --- a/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2Headers.java +++ b/codec-http2/src/main/java/io/netty/handler/codec/http2/Http2Headers.java @@ -55,7 +55,13 @@ public interface Http2Headers extends HeadersRFC 8441, + * Bootstrapping WebSockets with HTTP/2. + */ + PROTOCOL(":protocol", true); private static final char PSEUDO_HEADER_PREFIX = ':'; private static final byte PSEUDO_HEADER_PREFIX_BYTE = (byte) PSEUDO_HEADER_PREFIX; diff --git a/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersTest.java b/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersTest.java index dbd73c6c9c..ddcee1388b 100644 --- a/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersTest.java +++ b/codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2HeadersTest.java @@ -180,6 +180,7 @@ public class DefaultHttp2HeadersTest { headers.authority(of("netty.io")); headers.add(of("name3"), of("value4")); headers.scheme(of("https")); + headers.add(of(":protocol"), of("websocket")); return headers; } }