ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Upstream: Last-Modified and Accept-Ranges should be removable.


  • To: nginx-ru@xxxxxxxxx
  • Subject: [PATCH] Upstream: Last-Modified and Accept-Ranges should be removable.
  • From: Maxim Dounin <mdounin@xxxxxxxxxx>
  • Date: Tue, 26 May 2009 20:23:56 +0400

Hello!

Начиная с 0.7.44 фильтры (включая ssi и gzip) не имели возможности 
удалить заголовки Last-Modified и Accept-Ranges из ответа, 
полученного от upstream'а, и оные заголовки возвращались клиенту.

Прилагающийся патч устраняет проблему.

Maxim Dounin
# HG changeset patch
# User Maxim Dounin <mdounin@xxxxxxxxxx>
# Date 1243354399 -14400
# Node ID d53191f7bfea43fbee25ce4d98b711d3542cf1cc
# Parent  6d9fb4461113f8e861a39200c87699c3405060d4
Upstream: Last-Modified and Accept-Ranges should be removable.

Since introduction of cache in 0.7.44 it wasn't possible to clear
Accept-Ranges and Last-Modified headers got from upstream.  As a result
replies processed by various filters (including ssi and gzip) were send
to clients with incorrect headers.

While here fix ssi filter to actually clear Accept-Ranges header.  It wasn't
done correctly for proxied replies even before 0.7.44 - probably assuming
that clearing Content-Length is enough (it's enough for local replies, but
not for proxied).

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
@@ -360,6 +360,7 @@ ngx_http_ssi_header_filter(ngx_http_requ
     if (r == r->main) {
         ngx_http_clear_content_length(r);
         ngx_http_clear_last_modified(r);
+        ngx_http_clear_accept_ranges(r);
     }
 
     return ngx_http_next_header_filter(r);
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -3251,10 +3251,11 @@ ngx_http_upstream_copy_last_modified(ngx
 
     *ho = *h;
 
+    r->headers_out.last_modified = ho;
+
 #if (NGX_HTTP_CACHE)
 
     if (r->cached || r->upstream->cacheable) {
-        r->headers_out.last_modified = ho;
         r->headers_out.last_modified_time = ngx_http_parse_time(h->value.data,
                                                                 h->value.len);
     }
@@ -3378,6 +3379,8 @@ ngx_http_upstream_copy_allow_ranges(ngx_
 
     *ho = *h;
 
+    r->headers_out.accept_ranges = ho;
+
     return NGX_OK;
 }
 


 




Copyright © Lexa Software, 1996-2009.