Java OkHttp3是否通过HTTP转发代理支持HTTP2?

Java OkHttp3是否通过HTTP转发代理支持HTTP2?,java,okhttp,okhttp3,Java,Okhttp,Okhttp3,我在Android应用程序中使用OkHttp3通过转发代理向我的后端服务器发出HTTP/1.x请求,如下所示: List<Protocol> protos = new ArrayList<>(); protos.add(Protocol.HTTP_2); protos.add(Protocol.HTTP_1_1); InetSocketAddress proxyAddr = new InetSocketAddress("proxy.example.com", 80); P

我在Android应用程序中使用OkHttp3通过转发代理向我的后端服务器发出HTTP/1.x请求,如下所示:

List<Protocol> protos = new ArrayList<>();
protos.add(Protocol.HTTP_2);
protos.add(Protocol.HTTP_1_1);
InetSocketAddress proxyAddr = new InetSocketAddress("proxy.example.com", 80);
Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyAddr);
OkHttpClient cli = new OkHttpClient.Builder()
    .proxy(proxy)
    .protocols(protos)
    .build();
String url = "http://www.example.com/";
Request req = new Request.Builder().url(url).build();
Response res = cli.newCall(req).execute();
List protos=new ArrayList();
protos.add(Protocol.HTTP_2);
protos.add(Protocol.HTTP_1_1);
InetSocketAddress proxyAddr=新的InetSocketAddress(“proxy.example.com”,80);
Proxy Proxy=新代理(Proxy.Type.HTTP,proxyAddr);
OkHttpClient cli=新建OkHttpClient.Builder()
.代理(proxy)
.协议(protos)
.build();
字符串url=”http://www.example.com/";
Request req=new Request.Builder().url(url.build();
Response res=cli.newCall(req.execute();
我想升级到HTTP2。然而,在我看来,只有在我们不通过HTTP代理的情况下,OkHttp3才能发出HTTP2请求。所以,上面的代码不起作用

换句话说,OkHttp3支持下面的前3种情况,但不支持第4种情况。下面的HTTP/2表示h2(TLS上的HTTP/2)而不是h2c(明文上的HTTP/2)

a) 客户端上游服务器

b) 客户端转发代理上游服务器

c) 客户端上游服务器

d) 客户端转发代理上游服务器


有人确认或否认我的理解吗?谢谢。

OkHttp将通过HTTP代理执行HTTP/2。您需要在服务器上使用HTTPS,因为OkHttp不实现纯文本HTTP/2。

OkHttp将通过HTTP代理执行HTTP/2。您需要在服务器上使用HTTPS,因为OkHttp没有实现纯文本HTTP/2。

Jesse,我尝试通过nghttp2的转发代理nghttpx使用Proxy.Type.HTTP进行检索,该代理支持通过TLS的HTTP2。不幸的是,TLS握手没有发生,转发代理报告了以下错误

。。。tls:handshake libssl错误:错误:1407609B:SSL例程:SSL23\u GET\u CLIENT\u HELLO:https代理请求

据我所知,这个错误意味着okhttp3的代理代码没有与转发代理进行TLS握手

这让我认为通过前向代理通过TLS的HTTP2是毫无意义的,因为前向代理无法为加密请求添加任何值-前向代理只是一个传递管道。事实上,我认为TLS通过任何转发代理都是毫无意义的。通过TLS的端到端HTTP2确实有意义,但通过转发代理则没有意义。

Jesse,我尝试通过nghttp2的转发代理nghttpx使用proxy.Type.HTTP进行检索,该代理支持通过TLS的HTTP2。不幸的是,TLS握手没有发生,转发代理报告了以下错误

。。。tls:handshake libssl错误:错误:1407609B:SSL例程:SSL23\u GET\u CLIENT\u HELLO:https代理请求

据我所知,这个错误意味着okhttp3的代理代码没有与转发代理进行TLS握手


这让我认为通过前向代理通过TLS的HTTP2是毫无意义的,因为前向代理无法为加密请求添加任何值-前向代理只是一个传递管道。事实上,我认为TLS通过任何转发代理都是毫无意义的。通过TLS的端到端HTTP2确实有意义,但通过转发代理则没有意义。

Jesse,我是一个非常新的人,我有一个后续问题,无法在评论中清楚地表达出来-我不知道如何表达。请看下一个答案。杰西,我是一个非常新的人,我有一个后续问题,不能在评论中清楚地表达出来-我不知道如何表达。请看下一个答案。