[英]Does OkHttp3 support HTTP2 via a HTTP forward proxy?
我在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();
我想升級到HTTP2。 但是,在我看來,只有在我們不通過HTTP代理的情況下,OkHttp3才能發出HTTP2請求。 因此,以上代碼無法正常工作。
換句話說,OkHttp3支持下面的前3種情況,但不支持第4種情況。 下面的HTTP / 2表示h2(基於TLS的HTTP / 2)而不是h2c(基於純文本的HTTP / 2)。
a)客戶端<-HTTP / 1.x->上游服務器
b)客戶端<-HTTP / 1.x->轉發代理<-HTTP / x->上游服務器
c)客戶端<-HTTP / 2->上游服務器
d)客戶端<-HTTP / 2->轉發代理<-HTTP / x->上游服務器
有人確認或否認我的理解嗎? 謝謝。
OkHttp將通過HTTP代理執行HTTP / 2。 由於OkHttp不能實現純文本HTTP / 2,因此服務器上需要HTTPS。
傑西,我嘗試通過nghttp2的前向代理nghttpx(通過TLS支持HTTP2)通過Proxy.Type.HTTP檢索https://www.google.com/ 。 不幸的是,沒有進行TLS握手,並且轉發代理報告了以下錯誤。
... tls:握手libssl錯誤:錯誤:1407609B:SSL例程:SSL23_GET_CLIENT_HELLO:https代理請求
據我所知,此錯誤意味着okhttp3的代理代碼未與正向代理進行TLS握手。
這使我認為通過前向代理通過TLS的HTTP2毫無意義,因為前向代理將無法向加密請求中添加任何值-前向代理只是一個直通管道。 實際上,我認為通過任何轉發代理進行的TLS都是毫無意義的。 TLS上的端到端HTTP2確實有意義,但通過轉發代理則沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.