-
Go 的 http.Redirect 不只是把请求送到新地址,code 参数还决定临时跳转、PRG 和原方法保持等语义。本文按调用方需求说明 301、302、303、307、308 的选择,并给出带中文注释的可复用处理器。
-
只修改 RawQuery 不会自动改变 Path。本文通过保留 RawPath、重建 URL 丢失编码提示和路径二次编码三个对照,解释路径变化的来源,并给出保留解析错误的查询参数修改函数。
-
x509.Certificate.SerialNumber 的类型是 *big.Int,直接转 int64 可能溢出,也不适合做统一日志键。本文给出稳定十六进制格式、issuer 与 serial 的组合方式,以及 nil、负值和原始 DER 编码的边界处理。
-
SystemCertPool 的跨系统差异来自系统信任、进程环境与 Go 版本,不能用 Subjects 数量直接判断可信范围。本文给出不联网的最小复现程序,固定证书链、名称、用途和时间,对照系统信任与显式根,并解释错误与生命周期限制。
-
Go 的 tls.Config 默认禁止 TLS 重协商。本文从旧客户端兼容场景出发,解释 Renegotiation 的三个取值、TLS 1.2 与 TLS 1.3 的边界,以及如何用握手错误和 ConnectionState 判断拒绝原因。
-
Go 双向 TLS 中,只配置 ClientCAs 并不会自动要求客户端证书。本文用 ClientAuth 五种策略区分请求、强制提供与校验,再核对客户端 Certificates、服务端 ClientCAs 和 ConnectionState,定位连接成功但没有触发客户端证书校验的原因。
-
textproto.MIMEHeader.Values 会返回指定键关联的全部值,适合处理重复邮件头;Get 只取首值。本文用原创 Go 示例说明大小写键、缺失字段、nil map 与返回切片可变等边界。
-
Go 自定义根证书未生效时,先核对 Client 与 Transport 的配置归属,再区分信任链和主机名错误。通过本地 HTTPS 服务与两种证书池构造最小复现,并说明 PEM 加载、连接复用和 CA 轮换的处理方法。
-
mime.WordDecoder 遇到非内置字符集时,关键不是重写邮件头解析,而是让 CharsetReader 把指定字符集的字节 Reader 转成 UTF-8。本文从故障表现、回调输入到 Windows-1252 接入,说明 DecodeHeader 的错误边界与回归检查点。
-
用一个阻塞处理器构造 Go http.Server 优雅关闭的最小复现,再结合 ConnState、请求上下文和超时区分活动请求、空闲连接与 hijack 连接。
-
StateIdle 表示请求处理完成后的 keep-alive 等待,并不等于连接泄漏。本文用 http.Server.ConnState 记录状态和时间戳,再结合 IdleTimeout、StateClosed、HTTP/2 与 Hijacked 边界判断长期停留是否正常。
-
Go http.Client 请求超时却没有按预期结束,常见原因是使用了零值 Timeout、忽略了响应体读取阶段,或把 HTTP 状态错误误当成传输错误。本文用 httptest 构造延迟响应头的最小复现,并对比 Client.Timeout 与请求级 Context 的使用边界。
-
io.MultiReader 会把当前 Reader 的 EOF 当作这一段结束并继续读取后续 Reader,只有全部输入结束才向外返回 EOF。本文用最小示例区分中间 EOF、真实错误、空输入和资源关闭边界。
-
Go httptrace.GetConn 可以记录 Transport 在连接阶段准备处理的 host:port。本文说明如何绑定 ClientTrace、区分 GetConn 与 GotConn,并处理代理、并发回调和 Response.Body 清理边界。
-
Go net/http.Transport 连接池不复用时,先确认 Transport 是否被重复创建,再用 httptrace.GotConn 判断 Reused 和 WasIdle,最后检查 Response.Body、Keep-Alive 参数与服务端连接边界。