Files
xk-hy-forward-go/internal/forward/headers.go
2026-05-27 08:18:36 +08:00

50 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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)
}
}
}