@marcel91200 / caddy Mirror · read-only / commits / 512b0043
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 14, 05:15 UTC

http: header matcher supports fast prefix and suffix matching (#2888)

Matthew Holt committed Nov 27, 2019 at 11:52 UTC 512b004332ebf6dfa3fd14269de3cb0031233e34
1 file changed +11 -2
modules/caddyhttp/matchers.go
+11 -2
@@ -300,8 +300,17 @@ func (m MatchHeader) Match(r *http.Request) bool {
300 fieldVals:
301 for _, actualFieldVal := range actualFieldVals {
302 for _, allowedFieldVal := range allowedFieldVals {
303 - if actualFieldVal == allowedFieldVal {
304 - match = true
303 + switch {
304 + case strings.HasPrefix(allowedFieldVal, "*") && strings.HasSuffix(allowedFieldVal, "*"):
305 + match = strings.Contains(actualFieldVal, allowedFieldVal[1:len(allowedFieldVal)-1])
306 + case strings.HasPrefix(allowedFieldVal, "*"):
307 + match = strings.HasSuffix(actualFieldVal, allowedFieldVal[1:])
308 + case strings.HasSuffix(allowedFieldVal, "*"):
309 + match = strings.HasPrefix(actualFieldVal, allowedFieldVal[:len(allowedFieldVal)-1])
310 + default:
311 + match = actualFieldVal == allowedFieldVal
312 + }
313 + if match {
314 break fieldVals
315 }
316 }