You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have a Helidon prototype (on a fork) that implements basic support for HTTP/2. In particular, it supports the following use cases:
Upgrading a connection from HTTP to HTTP/2
Establishing an HTTP/2 connection with prior knowledge (client knows server supports it)
Handling regular HTTP connections on same endpoint
The implementation uses some new Helidon classes and some HTTP/2 codecs and utility classes available in Netty. The approach used in the prototype is to convert HTTP/2 traffic (streams) into HTTP requests before they hit the Helidon handlers (certain HTTP/2 specific information such as the stream ID are carried over as HTTP headers in order to correlate request and responses). All of our unit tests pass with the prototyped code since regular HTTP connections are supported as before.
One significant disadvantage of this approach is that payload streaming is lost: the entire HTTP/2 request is cached in memory before passing it to the existing handlers. This is how the Netty utility classes were designed; Helidon continues to use publishers and subscribers, but the payload, if originated from an HTTP/2 stream, is always made available as a single chunk (and if the max size of that payload is fixed now). Restoring streaming support would require some internal changes in Helidon.
Another disadvantage of the prototype is that HTTP/2 upgrade is always enabled, so there's an overhead of always inspecting incoming traffic looking for upgrade headers. This should probably be configurable for those applications where HTTP/2 is not required.
I'm closing this issue since the use of Netty codecs (and more) is covered by the prototype.
Forgot to mention that as part of this exercise, I also wrote some simple HTTP/2 clients using the new JDK 11 client API, and have verified compatibility with the HTTP/2 support in Helidon.
We need to understand how to use the codec to provide HTTP/2 support in Helidon:
https://github.com/netty/netty/blob/4.1/codec-http2
The text was updated successfully, but these errors were encountered: