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
}