Files

50 lines
1.3 KiB
Go
Raw Permalink Normal View History

2026-05-22 08:42:27 +08:00
package forward
import "net/http"
2026-05-27 08:18:36 +08:00
// superviseAllowedHeaders 监管通道28212允许透传到政务云的 Header 白名单。
// 与 transit-go hy.BuildUpload 组包一致其余头Cookie、User-Agent、X-Forward-Token 等)会被剥离。
2026-05-22 08:42:27 +08:00
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",
}
2026-05-27 08:18:36 +08:00
// fileAllowedHeaders 文件上传通道28211允许透传的 Header 白名单。
2026-05-22 08:42:27 +08:00
var fileAllowedHeaders = []string{
"Content-Type",
"X-Authorization",
}
2026-05-27 08:18:36 +08:00
// allowedHeaderSet 按通道 kind 返回允许头的 CanonicalKey 集合,供 O(1) 查找。
2026-05-22 08:42:27 +08:00
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
}
2026-05-27 08:18:36 +08:00
// copyAllowedHeaders 将 src 中位于白名单内的头复制到 dst真实转发与回显模式共用
2026-05-22 08:42:27 +08:00
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)
}
}
}