Apache或其他一些CLIENT JAVA实现是否支持HTTP/2?

Nee*_*hna 6 java apache http httpclient http2

我正在寻找可以连接到基于HTTP/2的服务器的java客户端..服务器已经支持HTTP/2 API.我没有看到最流行的Apache Http客户端https://hc.apache.org/仍然支持HTTP/2.

Apache是​​否已经为支持Http/2的Java客户端实现了一些实现?

如果没有,是否有一些Java客户端支持连接到HTTP/2,最好是在Java 7上?

sbo*_*det 7

Jetty提供了两个HTTP/2 Java客户端API.这都需要的Java 8和强制使用ALPN的,如解释在这里.

低级API

这些API基于HTTP2Client,它基于会话的HTTP/2概念,并使用侦听器来通知从服务器到达的HTTP/2 .

    // Setup and start the HTTP2Client.
    HTTP2Client client = new HTTP2Client();
    SslContextFactory sslContextFactory = new SslContextFactory();
    client.addBean(sslContextFactory);
    client.start();

    // Connect to the remote host to obtains a Session.
    FuturePromise<Session> sessionPromise = new FuturePromise<>();
    client.connect(sslContextFactory, new InetSocketAddress(host, port), new ServerSessionListener.Adapter(), sessionPromise);
    Session session = sessionPromise.get(5, TimeUnit.SECONDS);

    // Use the session to make requests.
    HttpFields requestFields = new HttpFields();
    requestFields.put("User-Agent", client.getClass().getName() + "/" + Jetty.VERSION);
    MetaData.Request metaData = new MetaData.Request("GET", new HttpURI("https://webtide.com/"), HttpVersion.HTTP_2, requestFields);
    HeadersFrame headersFrame = new HeadersFrame(metaData, null, true);
    session.newStream(headersFrame, new Promise.Adapter<>(), new Stream.Listener.Adapter()
    {
        @Override
        public void onHeaders(Stream stream, HeadersFrame frame)
        {
            // Response headers.
            System.err.println(frame);
        }

        @Override
        public void onData(Stream stream, DataFrame frame, Callback callback)
        {
            // Response content.
            System.err.println(frame);
            callback.succeeded();
        }
    });
Run Code Online (Sandbox Code Playgroud)

高级API

Jetty HttpClient提供了一种使用不同传输的方法,其中之一是HTTP/2传输.应用程序将使用更高级别的HTTP API,但Jetty下面将使用HTTP/2来传输HTTP语义.

通过这种方式,应用程序可以使用HttpClient透明提供的高级API ,并分析在配置或启动代码中使用的传输.

    // Setup and start HttpClient with HTTP/2 transport.
    HTTP2Client http2Client = new HTTP2Client();
    SslContextFactory sslContextFactory = new SslContextFactory();
    HttpClient httpClient = new HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory);
    httpClient.start();

    // Make a request.
    ContentResponse response = httpClient.GET("https://webtide.com/");
Run Code Online (Sandbox Code Playgroud)