zoukankan      html  css  js  c++  java
  • c# HttpClient的HTTP/2支持

    HTTP/2 是 HTTP 协议的主要修订版。HTTP/2 的一些显著功能是支持标头压缩和通过同一连接完全多路复用流。虽然 HTTP/2 保留了 HTTP 的语义(HTTP 标头、方法等),但它在数据框架和通过无线方式发送方面与 HTTP/1.x 是一种变化。

    HttpClient 现在添加用于发出 HTTP/2 请求的支持。当默认值仍为 HTTP/1.1 时,您可以通过在 HTTP 请求消息上设置版本来选择使用 HTTP/2。

     

    ---------------------

    var client = new HttpClient() { BaseAddress = new Uri("https://localhost:5001") };

    // HTTP/1.1 request

    using (var response = await client.GetAsync("/"))

    {

        Console.WriteLine(response.Content);

    }

    // HTTP/2 request

    using (var request = new HttpRequestMessage(HttpMethod.Get, "/") { Version = new Version(2, 0) })

    using (var response = await client.SendAsync(request))

    {

        Console.WriteLine(response.Content);

    }

    ---------------------

    或者,您可以通过在 HttpClient 上设置默认请求版本属性来默认发送 HTTP/2 请求。

    ---------------------

    var client = new HttpClient()

    {

        BaseAddress = new Uri("https://localhost:5001"),

        DefaultRequestVersion = new Version(2, 0)

    };

    // Defaults to HTTP/2

    using (var response = await client.GetAsync("/"))

    {

        Console.WriteLine(response.Content);

    }

    ---------------------

    由于框架的这种更改,服务器和客户端需要协商所使用的协议版本。应用程序层协议协商 (ALPN) 是一个 TLS 扩展,允许服务器和客户端协商作为 TLS 握手的一部分使用的协议版本。虽然服务器和客户端之间有可能在协议上事先知道,但大多数服务器仅支持 ALPN 作为建立 HTTP/2 连接的唯一方法。因此,HTTP/2 仅在 TLS 连接上由 HttpClient 协商。

    在开发方案中,当服务器和客户端事先知道两者都讲 HTTP/2 未加密时,您可以通过设置 AppContext 开关或环境变量(DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2UNENCRYPTEDSUPPORT=1)在明文上建立 HTTP/2 连接。

    AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

  • 相关阅读:
    [arXiv18]更快的基于非二叉化自底向上策略的转移系统成分句法分析
    [AAAI18]面向序列建模的元多任务学习
    [COLING18]两种成分句法分析的局部特征模型
    [ACL18]基于RNN和动态规划的线性时间成分句法分析
    成分句法分析综述
    [NAACL16]RNN文法
    [TACL17]基于中序转移的成分句法分析
    K-摇臂赌博机算法与实现
    关于JVM案例分析(四)
    关于JVM案例分析(三)
  • 原文地址:https://www.cnblogs.com/94cool/p/11022183.html
Copyright © 2011-2022 走看看