-
Go 反向代理中 Host 变了,通常不是请求丢失,而是 Request.Host、URL.Host 与 ProxyRequest.SetURL 的职责不同。本文结合 ReverseProxy 的 Rewrite 写法,说明如何保留入口 Host、设置上游 Host,并排查代理链中的字段来源。
-
Go 的 ETag 条件请求总是返回 200,通常不是客户端没有缓存,而是服务端没有读取 If-None-Match、比较规则不兼容,或在写入响应体后才尝试返回 304。本文给出可直接改造的 net/http handler 和排障顺序。
-
Go HTTP Range 返回长度不对时,常见根因不是一个字段,而是区间闭端点、文件 Seek 大小、压缩解码和自定义响应头互相错位。本文按服务端、标准库和客户端三层给出判断与修复方式。
-
Go TCP 建连成功不代表业务响应完成。本文按读写阶段检查过期 deadline、缓冲刷新、协议帧和部分传输,并用独占连接示例说明交换预算与超时重试边界。
-
Go 的 tls.ConnectionState.NegotiatedProtocol 为空,不一定表示 TLS 握手失败,可能是没有配置 ALPN、对端没有启用 ALPN,或读取时机早于握手完成。本文按值班排障顺序说明 NextProtos、HandshakeComplete、协商结果和回滚边界。
-
解释 Go x509.Certificate.CreateCRL 的签发证书、吊销条目、私钥和时间参数,并说明旧接口与 CreateRevocationList 的标准兼容边界。
-
Go 服务端可以在 ClientHelloInfo.SupportedVersions 中读取客户端声明支持的 TLS 版本,但它不是最终协商结果。本文说明回调读取、TLS 1.2 以下版本的推导边界、服务端 MinVersion/MaxVersion 的交集判断,以及握手完成后用 ConnectionState.Version 确认最终版本。
-
Go 的 SessionTicketsDisabled 会关闭 TLS 会话票据和 PSK 恢复支持,但客户端 ClientSessionCache 为空时也不会恢复。本文分清 TLS 恢复与 TCP 复用,说明客户端缓存、服务端票据和 ConnectionState.DidResume 的判断边界,并给出适合测试与安全策略切换的配置建议。
-
plugin.Open 返回不兼容错误时,先检查应用和插件是否使用相同的 Go 工具链、构建标签、环境变量与共享依赖源码,再决定是否重新统一构建或改用 IPC。
-
Go 的 URL.Path 会保存解码后的路径,RawPath 只是可选的编码提示。本文用 %2F 场景解释 EscapedPath 何时采用 RawPath、何时忽略它,并给出解析和手动构造 URL 时的稳妥写法。
-
Go init 顺序变化通常不是 init 语法失效,而是包依赖、包级变量依赖、源文件呈现顺序或隐藏副作用发生了变化。本文给出排查边界,并用显式 Setup 替代关键启动动作。
-
Go io/fs.Sub 创建子文件系统后,../ 父级路径为什么会失败?本文从 fs.ValidPath 和路径映射解释原因,并给出同时访问子目录与根级资源时保留原始 FS 的设计方式。
-
Go 读取 tar 归档时,tr.Read 返回 EOF 只表示当前条目读完,tr.Next 返回 io.EOF 才表示整个归档正常结束。本文给出带错误分支的读取循环,并说明损坏输入、未消费数据和 ErrInsecurePath 的处理边界。
-
Go 交叉编译时设置 CGO_ENABLED=0 后缺少实现,通常不是链接器突然丢了函数,而是带 import C 的文件被 cgo 构建约束排除。本文说明如何定位、补 !cgo 回退,或为目标平台准备 C 交叉工具链。
-
Go 文件名平台后缀与构建注释必须同时满足。本文用冲突片段和互补实现说明如何修改文件命名、表达平台并集,并区分目标环境、额外标签及文件选择结果。