Действительно ли HTTP/2.0 работает с HttpClient в Windows?

Как я слышал, вы можете использовать свойство Version для HttpClient, чтобы ориентироваться на окончательную версию HTTP.

using (var httpClient = new HttpClient())
{

    var message = new HttpRequestMessage(HttpMethod.Get, @"https://google.com") { Version = new Version(2,0) };
    var result = await httpClient.SendAsync(message);
    // ...
}

Но когда я смотрю на исходный код в CoreFX, меня это сильно смущает — похоже, он не работает с последней версией HTTP. По крайней мере, я не смог найти ничего полезного для версии 2.0.

string httpVersion = null;
if (state.RequestMessage.Version == HttpVersionInternal.Version10)
{
    httpVersion = "HTTP/1.0";
}
else if (state.RequestMessage.Version == HttpVersionInternal.Version11)
{
    httpVersion = "HTTP/1.1";
}

// ...

// Create an HTTP request handle.
state.RequestHandle = Interop.WinHttp.WinHttpOpenRequest(
    connectHandle,
    state.RequestMessage.Method.Method,
    state.RequestMessage.RequestUri.PathAndQuery,
    httpVersion,
    Interop.WinHttp.WINHTTP_NO_REFERER,
    Interop.WinHttp.WINHTTP_DEFAULT_ACCEPT_TYPES,
    flags);

// WILL USE HTTP/1.1 by default
[DllImport(Interop.Libraries.WinHttp, CharSet = CharSet.Unicode, SetLastError = true)]
public static extern SafeWinHttpHandle WinHttpOpenRequest(
    SafeWinHttpHandle connectHandle,
    string verb,
    string objectName,
    string version,
    string referrer,
    string acceptTypes,
    uint flags);

Я смотрю на что-то совершенно не связанное с проблемой?


person D Thr.    schedule 11.04.2018    source источник
comment
Согласно этому, HTTP/2 не имеет заголовков версий, поэтому вы ищете не в том месте. Переключение на HTTP/2 осуществляется через заголовок Upgrade.   -  person Jeroen Mostert    schedule 11.04.2018
comment
@JeroenMostert, можешь написать это как ответ?   -  person D Thr.    schedule 10.05.2018