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;
}
|