-
Go 的 Transport.TLSNextProto 不是普通的 HTTP/2 开关,而是 TLS ALPN 协商后把连接交给协议处理器的低层映射。本文按回调签名、authority、TLS 连接所有权和 HTTP/2 自动启用边界说明怎样注册与判断。
-
Go log/slog 的 Handler.WithAttrs 用来为新 Handler 保留公共属性。本文从 Logger.With 的调用关系讲起,说明如何附加请求字段、为什么原 Handler 不会被修改,以及自定义 Handler 如何处理属性切片、分组和 LogValuer。
-
Go x509 的 SSL_CERT_FILE 没有生效时,先检查它是否指向单个 PEM 文件,再排除自定义 RootCAs、平台证书 API 和 Go 版本差异。本文按参数形态拆解环境变量未加载证书的常见原因。
-
pflag 中不能通过比较当前值和默认值判断用户是否传参,因为用户可能显式传入了与默认值相同的值。本文说明 Changed、Visit 与 NoOptDefVal 的使用边界。
-
Go 1.26 新增的 Transport.NewClientConn 可以创建不进入 Transport 连接缓存的独立客户端连接。本文说明 scheme、address、ClientConn.RoundTrip、状态读取和关闭责任,并对比普通 http.Client.Do 的适用场景。
-
Go httptrace.Got1xxResponse 会在最终响应前收到每个 1xx 信息响应的状态码和响应头。本文说明如何把 ClientTrace 挂到请求上下文、读取 MIMEHeader、处理 100 Continue 与 103 Early Hints,并划清错误中止、重定向和响应体关闭边界。
-
Go HTTP/2 的 MaxConcurrentStreams 限制的是单条连接的并发流,不是所有连接共享的服务总并发。本文说明 Server.HTTP2 的配置方式、跨连接边界以及上线检查清单。
-
Go HTTP/2 priority 没有生效时,先确认 Go 版本、HTTP/2 协议和服务端开关。本文解释 net/http.Server.DisableClientPriority 的布尔语义,以及自定义写调度器让该字段失效的边界。
-
Go 1.24 起可以通过 net/http.Protocols 明确控制 Server 接收的协议。本文用服务端配置示例说明如何让 HTTP/1 与未加密 HTTP/2 共存,解释 h2c 与 TLS HTTP/2 的差异,并给出回滚和排障要点。
-
Go 的 http.Transport.HTTP2 用于配置 HTTP/2 连接的高级参数,但它不负责选择协议。本文区分 Protocols 与 HTTP2Config,说明客户端可用字段、零值语义和服务端专属配置。
-
Go net/http 的 Cookie 同时提供 RawExpires 和 Expires:前者保留 Set-Cookie 中的原始过期文本,后者是解析后的 UTC 时间。本文用一个小型响应读取示例说明如何读取、判断解析失败,并按日志、兼容处理和业务判断选择字段。
-
Go net/http 的 Response.Body 是 io.ReadCloser,关闭负责资源交接,是否读到 EOF 则会影响 HTTP/1.x 持久连接能否复用。本文解释只 Close 与读完再 Close 的差异,并给出小响应和大响应的处理写法。
-
Go 的 net/http.Transport.MaxResponseHeaderBytes 用来限制客户端接收的响应头总字节数。本文说明正数阈值、零值默认行为、超限错误与 Transport 复用时的配置边界。
-
Go net/http.Header.WriteSubset 可以按排除表把请求头写成线格式,但排除键不会自动规范化。本文用一个转发场景讲清 Header map、排除表、Request.Host 与写出错误的边界。
-
Go 1.25 的 runtime/trace.FlightRecorder 适合为长时间运行服务保留最近一段执行追踪。本文说明 MinAge、MaxBytes、WriteTo 和单次快照触发之间的关系。