Go net/http client 分析
背景 RoundTrip Transport TLS ALPN Http2 如何工作的? Client的建立 这是一个非常简单的使用Http Client的例子 client := &http.Client{ Timeout: 30 * time.Second, } 当上面的Client 初始化完成后, 将经过下面几个阶段: Do 入口 Parse And Get Req Send send with transport (DefaultTransport with h2 ,impl RoundTripper interface) graph LR A[Do 入口] --> B[Parse And Get Req] B --> C[Send] C --> D[send with transport] D --> E{DefaultTransport with h2} E --> F[impl RoundTripper interface] 这里注意,如果没有配置Transport,go将会选择一个 DefaultTansport,并且开启 ForceAttemptHTTP2 ForceAttemptHTTP2 这个字段为True将会忽略你的 non-zero Dial, DialTLS, or DialContext func or TLSClientConfig 当你提供自定义的拨号(dial)函数或 TLS 配置时,可能会有一些特别的需求或者约束,这些需求或约束可能与 HTTP/2 的某些特性不兼容。 设置为True则总是尝试使用h2。...