Skip to content

Commit e22b281

Browse files
committed
feat: Support multiple HTTP headers with the same name
1 parent b190463 commit e22b281

2 files changed

Lines changed: 8 additions & 6 deletions

File tree

resolver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,13 +137,13 @@ func newTransport(server string, transportType transport.Type, tlsConfig *tls.Co
137137
log.Debugf("Using HTTP(s) transport: %s", server)
138138

139139
// Parse HTTP headers
140-
headers := make(map[string]string)
140+
headers := make(map[string][]string)
141141
for _, header := range opts.HTTPHeaders {
142142
parts := strings.SplitN(header, ":", 2)
143143
if len(parts) == 2 {
144144
name := strings.TrimSpace(parts[0])
145145
value := strings.TrimSpace(parts[1])
146-
headers[name] = value
146+
headers[name] = append(headers[name], value)
147147
log.Debugf("Added header %s: %s", name, value)
148148
} else {
149149
log.Warnf("Invalid header format: %s (expected 'Name: Value')", header)

transport/http.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type HTTP struct {
2323
Method string
2424
HTTP2, HTTP3 bool
2525
NoPMTUd bool
26-
Headers map[string]string
26+
Headers map[string][]string
2727

2828
conn *http.Client
2929
}
@@ -85,9 +85,11 @@ func (h *HTTP) Exchange(m *dns.Msg) (*dns.Msg, error) {
8585

8686
// Set custom headers if provided
8787
if h.Headers != nil {
88-
for name, value := range h.Headers {
89-
log.Debugf("Setting custom header %s: %s", name, value)
90-
req.Header.Set(name, value)
88+
for name, values := range h.Headers {
89+
for _, value := range values {
90+
log.Debugf("Setting custom header %s: %s", name, value)
91+
req.Header.Add(name, value)
92+
}
9193
}
9294
}
9395

0 commit comments

Comments
 (0)