Ignore Cloudflare Priority header

With these changes, If the web request contains the new Priority header (RFC 9218), The server will ignore it and continue searching for other headers or query parameters.
pull/851/head
Gustavo de León 2023-08-28 23:20:04 -06:00
parent 45ca20dec9
commit 30a913c05c
No known key found for this signature in database
GPG Key ID: 5D94C6D38A5368AD
2 changed files with 21 additions and 7 deletions

View File

@ -9,6 +9,7 @@ import (
"net/http"
"net/netip"
"strings"
/*"regexp"*/
)
var mimeDecoder mime.WordDecoder
@ -129,7 +130,25 @@ func fromContext[T any](r *http.Request, key contextKey) (T, error) {
func maybeDecodeHeader(header string) string {
decoded, err := mimeDecoder.DecodeHeader(header)
if err != nil {
return header
return cloudflarePriorityIgnore(header)
}
return decoded
return cloudflarePriorityIgnore(decoded)
}
// Ignore new HTTP Priority header (see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority)
// Cloudflare adds this to requests when forwarding to the backend (ntfy), so we just ignore it.
// If the Priority header is set to "u=*, i" or "u=*" (by cloudflare), the header will be ignored.
// And continue searching for another header (x-priority, prio, p) or in the Query parameters.
func cloudflarePriorityIgnore(value string) string {
if strings.HasPrefix(value, "u=") {
return ""
}
// The same but with regex
/* pattern := `^u=\d+\s*,\s*i|u=\d+$`
regex := regexp.MustCompile(pattern)
if regex.MatchString(value) {
return ""
} */
return value
}

View File

@ -161,11 +161,6 @@ func ParsePriority(priority string) (int, error) {
case "5", "max", "urgent":
return 5, nil
default:
// Ignore new HTTP Priority header (see https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-priority)
// Cloudflare adds this to requests when forwarding to the backend (ntfy), so we just ignore it.
if strings.HasPrefix(p, "u=") {
return 3, nil
}
return 0, errInvalidPriority
}
}