deephaven / deephaven-core

Deephaven Community Core
Other
256 stars 80 forks source link

Configuration for websockets over https #3096

Open devinrsmith opened 1 year ago

devinrsmith commented 1 year ago

The web client uses websockets when the protocol is http, and HTTP/2 when the protocol is https. In some circumstances, a user might want to configure to use websockets over https.

This can be achieved by changing the code as seen in this commit https://github.com/deephaven/deephaven-core/commit/8847c7fb8b8757b44e5e5f97cd1dfefdd29eb3a1

Unfortunately, this is a compilation time decision, and not something that can be accomplished via startup configuration.

I'm not sure if there is a way where the client can be more "open" and allow some sort of server negotiation, or if there is another strategy we could employ to a better support this use case.

devinrsmith commented 1 year ago

Ping @mofojed @niloc132 for ideas.

niloc132 commented 1 year ago

With netty behind us, we could make a plain http endpoint of some kind to ask for advice on this.

On the other hand, websockets don't especially make sense in h2, so we're probably actually assuming h/1.1+tls?

I would want to know more about the specific use case before baking something in that all clients have to check on startup, as I expect this to be a pretty fringe use case.

devinrsmith commented 1 year ago

There's some levels of js translation that I'm oblivious too - but there might be some sort of way we could allow server configuration to change the js it's serving up. IE, have two versions of WebConnection and pick the appropriate one.

niloc132 commented 1 year ago

Right, so we're going to need some form of passing params in to the JS API from the UI anyway, to facilitate DHE's expected envoy setup, so it wouldnt be unreasonable to parameterize the grpc transport too. But the UI would have to get that value from somewhere to pass to the API. Perhaps whatever ssl terminating proxy that can't handle h2 could rewrite the /ide/ path to something like /ide/?grpc.websockets=true and the UI could use that to hint to the JS API.