Fix #83: httpserver HandleGroup should mount both group root and subtree#84
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #83
Summary
httpserver.HandlerGroup.HandleGroup(pattern, handler)previously registered onlypattern + "/"and appliedhttp.StripPrefix(pattern, handler). This meant a mounted group did not handle its exact root path unless the caller also registered the same handler withHandle(pattern, handler).This change updates
HandleGroupto mount the group at both:/pattern-> nested handler receives//pattern/...-> nested handler receives/...What changed
handlergroup.go:HandleGroupnow normalizes the mount pattern (trims trailing/) and registers both exact root and slash subtree routes.stripPrefixhelper that behaves likehttp.StripPrefix, but maps an empty strippedURL.Pathto/so nested groups can naturally registerGET /etc.stripPrefixalso propagatesURL.RawPathfor parity with standard library behavior.httpserver_test.go:/hg->GET /)./domains/verify->GET /verify).HandleGroup("/hg/", ...)behaves likeHandleGroup("/hg", ...)).Testing / validation
go test ./httpserver/...— passedtask check(lint + race tests) — passed with 0 issuesCode review summary
stripPrefixonly rewroteURL.Pathbut ignoredURL.RawPath, creating a behavior regression vs.http.StripPrefix. Fixed by also strippingRawPathwhen non-empty.Known limitations / follow-ups
None.