簡體   English   中英

OkHttp3是否通過HTTP轉發代理支持HTTP2?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM