java - Admite HTTP/1.1 y HTTP/2 con un cliente JAX-RS
jersey jetty (4)
Quiero implementar un cliente JAX-RS que admita HTTP / 1.1 y HTTP / 2 para un cliente JAX-RS.
La idea es utilizar HTTP / 2 si el servidor admite ALPN con HTTP / 2 y utiliza HTTP / 1.1 si el servidor no proporciona ninguna información.
He leído algunos artículos sobre ALPN y parece ser posible, pero no encuentro nada que respalde este protocolo al mismo tiempo. No logré conectar estos juntos.
Actualmente estoy usando el conector de transporte Jetty HTTP / 1.1 para Jersey y una implementación personalizada para el conector de transporte HTTP / 2 .
De hecho, ANLP solo es compatible con jdk a partir de JDK9 http://unrestful.io/2015/10/09/alpn-java.html .
Eso no es manejado por la api cliente JAX-RS
Si esta pregunta aún está abierta para contribuir, entonces hay una forma de implementar el cliente con la versión <JDK 9.
Como saben, HTTP / 2 requiere soporte ALPN si usa TLSv1.2 (h2).
netty paquete netty tiene algún soporte para HTTP / 2 siempre que tenga openssl (versión 1.0.2 o posterior) instalado en la plataforma.
El paquete Netty utilizará OpenSSL para el soporte de ALPN invocando bibliotecas nativas.
Implementamos un cliente con JDK8 y conseguimos generar una solicitud http2 para operación donde el servidor solo acepta la solicitud http2. Usamos a continuación la dependencia mencionada.
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<!--<version>5.0.0.Alpha2</version> -->
<version>4.1.29.Final</version>
</dependency>
Una solución podría ser usar nginx (o apache2) como proxy inverso para manejar ese requisito.
Nginx puede usar su servidor Jetty (usando http / 1.1 o http / 2 solo protcol) y el servidor http / 2 con alpn (con la última versión) para los clientes.
https://github.com/nhenneaux/jaxrs-http2-example
Mire esto para ver un ejemplo, pero asegúrese de que no haya llamadas asíncronas.