Changeset 7169:e8e19f5e0b8b in nginx


Ignore:
Timestamp:
11/20/17 17:50:35 (4 weeks ago)
Author:
Roman Arutyunyan <arut@…>
Branch:
default
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/http/modules/ngx_http_proxy_module.c

    r7167 r7169  
    10961096    loc_len = (r->valid_location && ctx->vars.uri.len) ? plcf->location.len : 0;
    10971097
    1098     if (r->quoted_uri || r->internal) {
     1098    if (r->quoted_uri || r->space_in_uri || r->internal) {
    10991099        escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
    11001100                                    r->uri.len - loc_len, NGX_ESCAPE_URI);
Note: See TracChangeset for help on using the changeset viewer.