FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Filter empty headers (#1239) · domdoescode/caddy@b783caa · GitHub

Commit b783caa

Browse files
authored andcommitted
Filter empty headers (caddyserver#1239)
* Filter empty headers Some web servers (e.g. Jetty 9.3) don’t like HTTP headers with empty values. This commit filters header replacements with zero length. * Extend tests to verify removal of empty headers * Handle add-header case * Change - Use short variable assignment
1 parent c972ea3 commit b783caa

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

‎caddyhttp/proxy/proxy.go‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,12 +287,18 @@ func mutateHeadersByRules(headers, rules http.Header, repl httpserver.Replacer)
287287
for ruleField, ruleValues := range rules {
288288
if strings.HasPrefix(ruleField, "+") {
289289
for _, ruleValue := range ruleValues {
290-
headers.Add(strings.TrimPrefix(ruleField, "+"), repl.Replace(ruleValue))
290+
replacement := repl.Replace(ruleValue)
291+
if len(replacement) > 0 {
292+
headers.Add(strings.TrimPrefix(ruleField, "+"), replacement)
293+
}
291294
}
292295
} else if strings.HasPrefix(ruleField, "-") {
293296
headers.Del(strings.TrimPrefix(ruleField, "-"))
294297
} else if len(ruleValues) > 0 {
295-
headers.Set(ruleField, repl.Replace(ruleValues[len(ruleValues)-1]))
298+
replacement := repl.Replace(ruleValues[len(ruleValues)-1])
299+
if len(replacement) > 0 {
300+
headers.Set(ruleField, replacement)
301+
}
296302
}
297303
}
298304
}

‎caddyhttp/proxy/proxy_test.go‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,8 +407,10 @@ func TestUpstreamHeadersUpdate(t *testing.T) {
407407
"Upgrade": {"{>Upgrade}"},
408408
"+Merge-Me": {"Merge-Value"},
409409
"+Add-Me": {"Add-Value"},
410+
"+Add-Empty": {"{}"},
410411
"-Remove-Me": {""},
411412
"Replace-Me": {"{hostname}"},
413+
"Clear-Me": {""},
412414
"Host": {"{>Host}"},
413415
}
414416
// set up proxy
@@ -448,6 +450,11 @@ func TestUpstreamHeadersUpdate(t *testing.T) {
448450
headerKey, expect, got)
449451
}
450452

453+
headerKey = "Add-Empty"
454+
if _, ok := actualHeaders[headerKey]; ok {
455+
t.Errorf("Request sent to upstream backend should not contain empty %v header", headerKey)
456+
}
457+
451458
headerKey = "Remove-Me"
452459
if _, ok := actualHeaders[headerKey]; ok {
453460
t.Errorf("Request sent to upstream backend should not contain %v header", headerKey)
@@ -461,6 +468,11 @@ func TestUpstreamHeadersUpdate(t *testing.T) {
461468
headerKey, expect, got)
462469
}
463470

471+
headerKey = "Clear-Me"
472+
if _, ok := actualHeaders[headerKey]; ok {
473+
t.Errorf("Request sent to upstream backend should not contain empty %v header", headerKey)
474+
}
475+
464476
if actualHost != expectHost {
465477
t.Errorf("Request sent to upstream backend should have value of Host with %s, but got %s", expectHost, actualHost)
466478
}

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL