libcurl — CURLOPT_HTTP_VERSION (HTTP2 без TLS)

#c

#c

Вопрос:

в libcurl есть опция CURLOPT_HTTP_VERSION со следующими параметрами:

CURL_HTTP_VERSION_2TLS:

Попробуйте HTTP 2 только через TLS (HTTPS).

CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE:

Выдавать HTTP-запросы, отличные от TLS, с использованием HTTP / 2

Не работает ли http 2 автоматически при TLS-соединении? Может ли http 2 быть с открытым незашифрованным соединением?

Ответ №1:

Да, HTTP / 2 может работать без шифрования. Но большинство реализаций поддерживает только зашифрованные запросы. Что касается упомянутых параметров, они описаны в документации:

CURL_HTTP_VERSION_2TLS

Попробуйте HTTP 2 только через TLS (HTTPS). libcurl вернется к HTTP 1.1, если HTTP 2 не может быть согласован с сервером HTTPS. Для HTTP-серверов с открытым текстом libcurl будет использовать 1.1. (Добавлено в 7.47.0)

CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE

Выдавать HTTP-запросы, отличные от TLS, с использованием HTTP / 2 без обновления HTTP / 1.1. Требуется предварительное знание того, что сервер сразу поддерживает HTTP / 2. Запросы HTTPS по-прежнему будут выполнять HTTP / 2 стандартным способом с согласованной версией протокола при рукопожатии TLS. (Добавлено в 7.49.0)

Таким образом, CURL_HTTP_VERSION_2TLS имеет запасной вариант для протокола HTTP 1.1, а CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE пытается использовать только HTTP / 2 (с TLS для запроса HTTPS и без него для HTTP-запроса).