This version (2017/05/27 13:44) is a draft.
Approvals: 0/1

[08:48:01] * ChanServ sets mode: +o temporal_ [09:48:08] * ChanServ sets mode: +o temporalfox

[11:06:34] *** ChanServ sets mode: +o temporalfox

[16:04:39] <AlexLehm> temporalfox: hi Julien, I have implemented a first version of https proxy support based on the proxy support in Netty

[16:05:12] <temporalfox> AlexLehm great, however I would like to know how this can work with HTTP/1 and HTTP/2

[16:05:24] <temporalfox> i.e connect to a proxy via HTTP/1 and then either make HTTP/1 or HTTP/2 requests

[16:05:46] <temporalfox> same with connectin in hTTP/2 then make either HTTP/1 or HTTP/2

[16:05:49] <temporalfox> that's a scenario that should be possible I think

[16:06:03] <AlexLehm> I have almost no knowledge how http 2 works, for starters I have implemented it with the http 1.1 client

[16:06:06] <temporalfox> how does it work via netty ?

[16:06:32] <temporalfox> with HTTP/2 you also make CONNECT

[16:06:42] <temporalfox> the difference I think it's in the setup

[16:06:43] <AlexLehm> netty has a HttpProxyHandler class that does the proxy connection dialogue before doing the sslhandler

[16:06:49] <temporalfox> ok

[16:06:50] <AlexLehm> it might work with http/2 as well

[16:07:12] <temporalfox> can you try to make a test for this ?

[16:07:19] <temporalfox> in HttpTest class

[16:07:38] <temporalfox> I would look after at using the same handler with HTTP/2 protocol directly

[16:07:46] <temporalfox> but I think it would not work because of multiplexing

[16:07:52] <AlexLehm> i have thought some time about how to test that inside the vertx build, for now I am using a squid running on my computer, which doesn't work in general

[16:08:20] <temporalfox> ah I think you would write a test directly with a Netty server ?

[16:08:32] <AlexLehm> I think the easiest way would be to write a mock-proxy that does the connect and ssl, I have written something like that in a test project

[16:08:42] <temporalfox> or with an HttpServer that uses the toNetSocket ?

[16:08:57] <temporalfox> that's why it is for isnt it ?

[16:08:58] <AlexLehm> the test server should work with vert.x, basically its a http request that uses the NetSocket

[16:09:12] <temporalfox> ah yes that's what I meant

[16:09:20] <temporalfox> however it would only be able to test HTTP 1 easily

[16:09:25] <temporalfox> well also for HTTP/2

[16:09:34] <temporalfox> but it is framed protocol

[16:09:38] <temporalfox> not in clear

[16:09:57] <temporalfox> maybe we can have your work in a branch first

[16:10:06] <temporalfox> and see how to improve it for various case

[16:11:03] <temporalfox> and how about doing a real proxy ?

[16:11:12] <temporalfox> with two HTTP servers

[16:11:44] <AlexLehm> a real proxy would be possible as well, that just has to pump the data in both directions to the origin server

[16:11:58] <temporalfox> yes that would be easier for testing HTTP/2

[16:12:12] <AlexLehm> a connect proxy is basically a simple port forwarder anyway

[16:12:18] <temporalfox> yes

[16:12:24] <AlexLehm> https://github.com/alexlehm/vert.x/tree/issues/%231361-https-proxy

[16:13:00] <temporalfox> please provide a tests for http/1 with a proxy and a server

[16:13:14] <temporalfox> then I'll try to make an http 2 test after an http 1 connect

[16:13:25] <temporalfox> and see what is possible for HTTP/2 connect

[16:16:32] <AlexLehm> ok

[16:21:19] <temporalfox> actually the code inside the proxy

[16:21:25] <temporalfox> handler is quite easy

[16:21:40] <temporalfox> well anyway, I think what matters is testing :-)