package forward import "net/http" // superviseAllowedHeaders 监管通道(28212)允许透传到政务云的 Header 白名单。 // 与 transit-go hy.BuildUpload 组包一致;其余头(Cookie、User-Agent、X-Forward-Token 等)会被剥离。 var superviseAllowedHeaders = []string{ "Content-Type", "X-Ca-Appkey", "X-Ca-Encryption", "X-Ca-Nonce", "X-Ca-Timestamp", "X-Service-Id", "X-Service-Method", "X-Ca-Signature", "requestBody", } // fileAllowedHeaders 文件上传通道(28211)允许透传的 Header 白名单。 var fileAllowedHeaders = []string{ "Content-Type", "X-Authorization", } // allowedHeaderSet 按通道 kind 返回允许头的 CanonicalKey 集合,供 O(1) 查找。 func allowedHeaderSet(kind string) map[string]struct{} { list := superviseAllowedHeaders if kind == "file" { list = fileAllowedHeaders } set := make(map[string]struct{}, len(list)) for _, name := range list { set[http.CanonicalHeaderKey(name)] = struct{}{} } return set } // copyAllowedHeaders 将 src 中位于白名单内的头复制到 dst(真实转发与回显模式共用)。 func copyAllowedHeaders(dst, src http.Header, kind string) { allow := allowedHeaderSet(kind) for key, values := range src { if _, ok := allow[http.CanonicalHeaderKey(key)]; !ok { continue } for _, v := range values { dst.Add(key, v) } } }