Changeset 5733:e491b26fa5a1 in nginx


Ignore:
Timestamp:
06/25/14 22:21:01 (6 years ago)
Author:
Maxim Dounin <mdounin@…>
Branch:
default
Phase:
public
Message:

Entity tags: downgrade strong etags to weak ones as needed.

See http://mailman.nginx.org/pipermail/nginx-devel/2013-November/004523.html.

Location:
src/http
Files:
8 edited

Legend:

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

    r4746 r5733  
    122122    ngx_http_clear_content_length(r);
    123123    ngx_http_clear_accept_ranges(r);
    124     ngx_http_clear_etag(r);
     124    ngx_http_weak_etag(r);
    125125
    126126    return ngx_http_next_header_filter(r);
  • src/http/modules/ngx_http_gunzip_filter_module.c

    r5436 r5733  
    166166    ngx_http_clear_content_length(r);
    167167    ngx_http_clear_accept_ranges(r);
    168     ngx_http_clear_etag(r);
     168    ngx_http_weak_etag(r);
    169169
    170170    return ngx_http_next_header_filter(r);
  • src/http/modules/ngx_http_gzip_filter_module.c

    r5432 r5733  
    307307    ngx_http_clear_content_length(r);
    308308    ngx_http_clear_accept_ranges(r);
    309     ngx_http_clear_etag(r);
     309    ngx_http_weak_etag(r);
    310310
    311311    return ngx_http_next_header_filter(r);
  • src/http/modules/ngx_http_ssi_filter_module.c

    r5540 r5733  
    370370        ngx_http_clear_content_length(r);
    371371        ngx_http_clear_accept_ranges(r);
    372         ngx_http_clear_etag(r);
    373372
    374373        if (!slcf->last_modified) {
    375374            ngx_http_clear_last_modified(r);
     375            ngx_http_clear_etag(r);
     376
     377        } else {
     378            ngx_http_weak_etag(r);
    376379        }
    377380    }
  • src/http/modules/ngx_http_sub_filter_module.c

    r5710 r5733  
    176176    if (r == r->main) {
    177177        ngx_http_clear_content_length(r);
    178         ngx_http_clear_etag(r);
    179178
    180179        if (!slcf->last_modified) {
    181180            ngx_http_clear_last_modified(r);
     181            ngx_http_clear_etag(r);
     182
     183        } else {
     184            ngx_http_weak_etag(r);
    182185        }
    183186    }
  • src/http/modules/ngx_http_xslt_filter_module.c

    r5330 r5733  
    338338        }
    339339
    340         ngx_http_clear_etag(r);
    341 
    342340        conf = ngx_http_get_module_loc_conf(r, ngx_http_xslt_filter_module);
    343341
    344342        if (!conf->last_modified) {
    345343            ngx_http_clear_last_modified(r);
     344            ngx_http_clear_etag(r);
     345
     346        } else {
     347            ngx_http_weak_etag(r);
    346348        }
    347349    }
  • src/http/ngx_http_core_module.c

    r5715 r5733  
    18491849
    18501850    return NGX_OK;
     1851}
     1852
     1853
     1854void
     1855ngx_http_weak_etag(ngx_http_request_t *r)
     1856{
     1857    size_t            len;
     1858    u_char           *p;
     1859    ngx_table_elt_t  *etag;
     1860
     1861    etag = r->headers_out.etag;
     1862
     1863    if (etag == NULL) {
     1864        return;
     1865    }
     1866
     1867    if (etag->value.len > 2
     1868        && etag->value.data[0] == 'W'
     1869        && etag->value.data[1] == '/')
     1870    {
     1871        return;
     1872    }
     1873
     1874    if (etag->value.len < 1 || etag->value.data[0] != '"') {
     1875        r->headers_out.etag->hash = 0;
     1876        r->headers_out.etag = NULL;
     1877        return;
     1878    }
     1879
     1880    p = ngx_pnalloc(r->pool, etag->value.len + 2);
     1881    if (p == NULL) {
     1882        r->headers_out.etag->hash = 0;
     1883        r->headers_out.etag = NULL;
     1884        return;
     1885    }
     1886
     1887    len = ngx_sprintf(p, "W/%V", &etag->value) - p;
     1888
     1889    etag->value.data = p;
     1890    etag->value.len = len;
    18511891}
    18521892
  • src/http/ngx_http_core_module.h

    r5605 r5733  
    502502void ngx_http_set_exten(ngx_http_request_t *r);
    503503ngx_int_t ngx_http_set_etag(ngx_http_request_t *r);
     504void ngx_http_weak_etag(ngx_http_request_t *r);
    504505ngx_int_t ngx_http_send_response(ngx_http_request_t *r, ngx_uint_t status,
    505506    ngx_str_t *ct, ngx_http_complex_value_t *cv);
Note: See TracChangeset for help on using the changeset viewer.