mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 01:12:40 +08:00
Proxy: escape explicit space in URI in default cache key.
If the flag space_in_uri is set, the URI in HTTP upstream request is escaped to convert space to %20. However this flag is not checked while creating the default cache key. This leads to different cache keys for requests '/foo bar' and '/foo%20bar', while the upstream requests are identical. Additionally, the change fixes background cache updates when the client URI contains unescaped space. Default cache key in a subrequest is always based on escaped URI, while the main request may not escape it. As a result, background cache update subrequest may update a different cache entry.
This commit is contained in:
parent
891908cd0c
commit
6754a40466
@ -1095,7 +1095,7 @@ ngx_http_proxy_create_key(ngx_http_request_t *r)
|
||||
|
||||
loc_len = (r->valid_location && ctx->vars.uri.len) ? plcf->location.len : 0;
|
||||
|
||||
if (r->quoted_uri || r->internal) {
|
||||
if (r->quoted_uri || r->space_in_uri || r->internal) {
|
||||
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user