es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring Boot. ¿Cómo probar la versión del protocolo http?

Estoy usando Spring Boot 2.6.0 y Spring MVC en mi aplicación.
Quiero cambiar el protocolo del controlador de la versión http/1.1 a http/2.
En primer lugar, he escrito el siguiente test de integración para eso:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class PruebaDeIntegracion {@Autowired
    private TestRestTemplate template;

    @Test
    public void puedeObtener() {
        ResponseEntity<JsonResponse> entity = template.getForEntity("/foo", JsonResponse.class);
        assertEquals(HttpStatus.OK, entity.getStatusCode());
        assertNotNull(entity.getBody());
        //todo: assertEquals("http/2", entity.getProtocol());
        //todo: assertEquals("http/1.1", entity.getProtocol())
    }
}

Pero el método entity.getProtocol() no existe y no puedo encontrar otra forma de comprobar la versión del protocolo. ¿Alguien sabe cómo probar correctamente la versión del protocolo en una aplicación de Spring Boot?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Lamentablemente, no hay una manera directa de probar la versión del protocolo en una aplicación Spring Boot. El método getProtocol() no está disponible en la clase ResponseEntity. Sin embargo, hay algunas otras formas de verificar que la versión del protocolo se ha cambiado a http/2.

    Una forma es utilizar una herramienta de análisis de red como Wireshark para capturar el tráfico de red entre el cliente y el servidor. Wireshark puede decodificar los paquetes y mostrar la versión del protocolo utilizada en los mensajes HTTP. Esto requiere ejecutar la aplicación y realizar la prueba mientras se captura el tráfico de red.

    Otra forma es configurar el servidor para que registre la versión del protocolo para cada solicitud. Esto se puede hacer agregando un interceptor HTTP personalizado que registra la versión del protocolo para cada solicitud. Aquí hay un ejemplo:

    public class ProtocolLoggingInterceptor implements HandlerInterceptor {
    
        private static final Logger logger = LoggerFactory.getLogger(ProtocolLoggingInterceptor.class);
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            logger.info("Versión del protocolo: {}", request.getProtocol());
            return true;
        }
    }
    

    Este interceptor registra la versión del protocolo para cada solicitud. Para habilitarlo en la aplicación, agréguelo al registro de interceptores en la configuración de Spring MVC:

    @Configuration
    public class MvcConfig implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new ProtocolLoggingInterceptor());
        }
    }
    

    Con este interceptor habilitado, se registrará la versión del protocolo para cada solicitud. En la prueba de integración, puede verificar la salida de registro para verificar que la versión del protocolo se ha cambiado a http/2.

Comments are closed.