-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
How to prevent uri decoding in routing #561
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
After upgrading my issue is the opposite; has decoding been disabled? Possibly related to #587. As a workaround I have done the following: url.QueryUnescape(c.Param("...")) No biggie, just verifying that this is intended? |
@Puffton Yes, it seems they have changed the code to escape the parameters. |
Seems like path params with escapes were only messing up the router. But after routing and parsing out the path params, isn't it desirable to unescape the params before invoking the handlers? This broke a lot of our tests, because our routes use path params with encoded spaces in them pretty often. I'm tempted to put in a root middleware like:
|
@ansel1 I second your opinion. Params should be unescaped before the handler is invoked. |
We have ended up inserting another middleware in our chain which unescapes them all right after routing. |
FYI: our approach to working around this was middleware which called url.QueryUnescape() on the params. This method is flawed unfortunately. Query escaped strings may replace spaces with '+', as golang's url.QueryEscape() function does. So url.QueryUnescape() replaces '+' with spaces. But URI path segments are allowed to have literal '+' characters in them, so "unescaping" them back into spaces is inappropriate. golang's url package does have the code to correctly unescape path segments, but the only way to invoke it is: u, _ := url.Parse(param)
param = u.Path |
Please consider the following example:
The routing is not working when the
term
contains%2F
, because the term is decoded and%2F
is converted to/
, e.g.,http://localhost:5050/search/a%2Fb/1
returnsNot Found
exception.The text was updated successfully, but these errors were encountered: