Description
Proposal Details
With the upcoming wildcard prefixes arriving in the stdlib Mux in Go 1.22, it makes sense to revisit some functions in the stdlib to ensure they're compatible with the change.
http.StripPrefix
does not currently support the newly added wildcards. This means using any wildcard in a path will break routing when used with http.StripPrefix
. As one example:
r.Handle("/{username}/*", http.StripPrefix("/{username}", userHandler)) // Does not work
There are two clear paths forward:
- Add a new function which supports wildcards,
StripWildcardPrefix
, or - Modify the existing
StripPrefix
to support wildcards
I propose we modify http.StripPrefix
, since the performance in stripping wildcards will not have any impact on existing, non-wildcard paths.
Either option is better than exists today, with every project that wants both wildcards and StripPrefix needing to roll their own implementation, despite there being a StripPrefix
in the standard library.
I've created an example implementation with a few tests and benchmarks here: https://github.com/egtann/strip-wildcard-prefix
If no action is taken, the documentation for http.StripPrefix
should still be updated to clearly state that it does not strip wildcards.
Updates
We can add support for this to http.StripPrefix
without any impact for existing, non-wildcard paths by simply using the original http.StripPrefix implementation if the prefix has no wildcards (which is known at initialization, not when routing). I've adjusted the text above to clarify.