libcurl tiene la opción CURLOPT_HTTP_ VERSION con los siguientes parámetros:
CURL_HTTP_VERSION_2TLS:
Intente HTTP 2 sobre TLS (HTTPS) únicamente.
CURL_HTTP_VERSION_2_CONOCIMIENTOS PREVIOS:
Emitir solicitudes HTTP sin TLS mediante HTTP/2
¿No funciona http 2 automáticamente con una conexión TLS? ¿Puede ser http 2 con una conexión abierta no cifrada?
Sí, HTTP/2 puede funcionar sin encriptación . Pero la mayoría de las implementaciones solo admiten solicitudes cifradas. A partir de los parámetros mencionados se describen en la documentación:
CURL_HTTP_VERSION_2TLS
Intente HTTP 2 sobre TLS (HTTPS) únicamente. libcurl recurrirá a HTTP 1.1 si HTTP 2 no se puede negociar con el servidor HTTPS. Para servidores HTTP de texto claro, libcurl usará 1.1. (Agregado en 7.47.0)
CURL_HTTP_VERSION_2_CONOCIMIENTO_PRIOR
Emita solicitudes HTTP sin TLS utilizando HTTP/2 sin actualización HTTP/1.1. Requiere conocimiento previo de que el servidor admite HTTP/2 de inmediato. Las solicitudes HTTPS seguirán haciendo HTTP/2 de la manera estándar con la versión del protocolo negociado en el protocolo de enlace TLS. (Agregado en 7.49.0)
Por lo tanto, CURL_HTTP_VERSION_2TLS recurre al protocolo HTTP 1.1 y CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE intenta solo HTTP/2 (con TLS para solicitudes HTTPS y sin él para solicitudes HTTP).