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)
}
}
}