yup, just tested this today and works like a charm, thanks!
On Mon, Jul 21, 2014 at 6:48 PM, Aaron Peschel <aaron.pesc...@gmail.com> wrote: > Thank you for your help through this whole process, Maxim! > > On Wed, Jun 25, 2014 at 3:40 PM, Maxim Dounin <mdou...@mdounin.ru> wrote: > > details: http://hg.nginx.org/nginx/rev/e491b26fa5a1 > > branches: > > changeset: 5733:e491b26fa5a1 > > user: Maxim Dounin <mdou...@mdounin.ru> > > date: Thu Jun 26 02:21:01 2014 +0400 > > description: > > Entity tags: downgrade strong etags to weak ones as needed. > > > > See > http://mailman.nginx.org/pipermail/nginx-devel/2013-November/004523.html. > > > > diffstat: > > > > src/http/modules/ngx_http_addition_filter_module.c | 2 +- > > src/http/modules/ngx_http_gunzip_filter_module.c | 2 +- > > src/http/modules/ngx_http_gzip_filter_module.c | 2 +- > > src/http/modules/ngx_http_ssi_filter_module.c | 5 ++- > > src/http/modules/ngx_http_sub_filter_module.c | 5 ++- > > src/http/modules/ngx_http_xslt_filter_module.c | 6 ++- > > src/http/ngx_http_core_module.c | 40 > ++++++++++++++++++++++ > > src/http/ngx_http_core_module.h | 1 + > > 8 files changed, 56 insertions(+), 7 deletions(-) > > > > diffs (153 lines): > > > > diff --git a/src/http/modules/ngx_http_addition_filter_module.c > b/src/http/modules/ngx_http_addition_filter_module.c > > --- a/src/http/modules/ngx_http_addition_filter_module.c > > +++ b/src/http/modules/ngx_http_addition_filter_module.c > > @@ -121,7 +121,7 @@ ngx_http_addition_header_filter(ngx_http > > > > ngx_http_clear_content_length(r); > > ngx_http_clear_accept_ranges(r); > > - ngx_http_clear_etag(r); > > + ngx_http_weak_etag(r); > > > > return ngx_http_next_header_filter(r); > > } > > diff --git a/src/http/modules/ngx_http_gunzip_filter_module.c > b/src/http/modules/ngx_http_gunzip_filter_module.c > > --- a/src/http/modules/ngx_http_gunzip_filter_module.c > > +++ b/src/http/modules/ngx_http_gunzip_filter_module.c > > @@ -165,7 +165,7 @@ ngx_http_gunzip_header_filter(ngx_http_r > > > > ngx_http_clear_content_length(r); > > ngx_http_clear_accept_ranges(r); > > - ngx_http_clear_etag(r); > > + ngx_http_weak_etag(r); > > > > return ngx_http_next_header_filter(r); > > } > > diff --git a/src/http/modules/ngx_http_gzip_filter_module.c > b/src/http/modules/ngx_http_gzip_filter_module.c > > --- a/src/http/modules/ngx_http_gzip_filter_module.c > > +++ b/src/http/modules/ngx_http_gzip_filter_module.c > > @@ -306,7 +306,7 @@ ngx_http_gzip_header_filter(ngx_http_req > > > > ngx_http_clear_content_length(r); > > ngx_http_clear_accept_ranges(r); > > - ngx_http_clear_etag(r); > > + ngx_http_weak_etag(r); > > > > return ngx_http_next_header_filter(r); > > } > > diff --git a/src/http/modules/ngx_http_ssi_filter_module.c > b/src/http/modules/ngx_http_ssi_filter_module.c > > --- a/src/http/modules/ngx_http_ssi_filter_module.c > > +++ b/src/http/modules/ngx_http_ssi_filter_module.c > > @@ -369,10 +369,13 @@ ngx_http_ssi_header_filter(ngx_http_requ > > if (r == r->main) { > > ngx_http_clear_content_length(r); > > ngx_http_clear_accept_ranges(r); > > - ngx_http_clear_etag(r); > > > > if (!slcf->last_modified) { > > ngx_http_clear_last_modified(r); > > + ngx_http_clear_etag(r); > > + > > + } else { > > + ngx_http_weak_etag(r); > > } > > } > > > > diff --git a/src/http/modules/ngx_http_sub_filter_module.c > b/src/http/modules/ngx_http_sub_filter_module.c > > --- a/src/http/modules/ngx_http_sub_filter_module.c > > +++ b/src/http/modules/ngx_http_sub_filter_module.c > > @@ -175,10 +175,13 @@ ngx_http_sub_header_filter(ngx_http_requ > > > > if (r == r->main) { > > ngx_http_clear_content_length(r); > > - ngx_http_clear_etag(r); > > > > if (!slcf->last_modified) { > > ngx_http_clear_last_modified(r); > > + ngx_http_clear_etag(r); > > + > > + } else { > > + ngx_http_weak_etag(r); > > } > > } > > > > diff --git a/src/http/modules/ngx_http_xslt_filter_module.c > b/src/http/modules/ngx_http_xslt_filter_module.c > > --- a/src/http/modules/ngx_http_xslt_filter_module.c > > +++ b/src/http/modules/ngx_http_xslt_filter_module.c > > @@ -337,12 +337,14 @@ ngx_http_xslt_send(ngx_http_request_t *r > > r->headers_out.content_length = NULL; > > } > > > > - ngx_http_clear_etag(r); > > - > > conf = ngx_http_get_module_loc_conf(r, > ngx_http_xslt_filter_module); > > > > if (!conf->last_modified) { > > ngx_http_clear_last_modified(r); > > + ngx_http_clear_etag(r); > > + > > + } else { > > + ngx_http_weak_etag(r); > > } > > } > > > > diff --git a/src/http/ngx_http_core_module.c > b/src/http/ngx_http_core_module.c > > --- a/src/http/ngx_http_core_module.c > > +++ b/src/http/ngx_http_core_module.c > > @@ -1851,6 +1851,46 @@ ngx_http_set_etag(ngx_http_request_t *r) > > } > > > > > > +void > > +ngx_http_weak_etag(ngx_http_request_t *r) > > +{ > > + size_t len; > > + u_char *p; > > + ngx_table_elt_t *etag; > > + > > + etag = r->headers_out.etag; > > + > > + if (etag == NULL) { > > + return; > > + } > > + > > + if (etag->value.len > 2 > > + && etag->value.data[0] == 'W' > > + && etag->value.data[1] == '/') > > + { > > + return; > > + } > > + > > + if (etag->value.len < 1 || etag->value.data[0] != '"') { > > + r->headers_out.etag->hash = 0; > > + r->headers_out.etag = NULL; > > + return; > > + } > > + > > + p = ngx_pnalloc(r->pool, etag->value.len + 2); > > + if (p == NULL) { > > + r->headers_out.etag->hash = 0; > > + r->headers_out.etag = NULL; > > + return; > > + } > > + > > + len = ngx_sprintf(p, "W/%V", &etag->value) - p; > > + > > + etag->value.data = p; > > + etag->value.len = len; > > +} > > + > > + > > ngx_int_t > > ngx_http_send_response(ngx_http_request_t *r, ngx_uint_t status, > > ngx_str_t *ct, ngx_http_complex_value_t *cv) > > diff --git a/src/http/ngx_http_core_module.h > b/src/http/ngx_http_core_module.h > > --- a/src/http/ngx_http_core_module.h > > +++ b/src/http/ngx_http_core_module.h > > @@ -501,6 +501,7 @@ void *ngx_http_test_content_type(ngx_htt > > ngx_int_t ngx_http_set_content_type(ngx_http_request_t *r); > > void ngx_http_set_exten(ngx_http_request_t *r); > > ngx_int_t ngx_http_set_etag(ngx_http_request_t *r); > > +void ngx_http_weak_etag(ngx_http_request_t *r); > > ngx_int_t ngx_http_send_response(ngx_http_request_t *r, ngx_uint_t > status, > > ngx_str_t *ct, ngx_http_complex_value_t *cv); > > u_char *ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *name, > > > > _______________________________________________ > > nginx-devel mailing list > > nginx-devel@nginx.org > > http://mailman.nginx.org/mailman/listinfo/nginx-devel > > _______________________________________________ > nginx-devel mailing list > nginx-devel@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel >
_______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel