Mercurial > hg > nginx
changeset 2701:756f73ca1e39
support HEAD in proxy cache
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 15 Apr 2009 09:53:22 +0000 |
parents | aee784753144 |
children | eace65d6092b |
files | src/http/ngx_http_core_module.c src/http/ngx_http_core_module.h src/http/ngx_http_upstream.c |
diffstat | 3 files changed, 21 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -691,7 +691,7 @@ ngx_module_t ngx_http_core_module = { }; -static ngx_str_t ngx_http_core_get_method = { 3, (u_char *) "GET " }; +ngx_str_t ngx_http_core_get_method = { 3, (u_char *) "GET " }; void
--- a/src/http/ngx_http_core_module.h +++ b/src/http/ngx_http_core_module.h @@ -468,6 +468,8 @@ extern ngx_module_t ngx_http_core_modul extern ngx_uint_t ngx_http_max_module; +extern ngx_str_t ngx_http_core_get_method; + #define ngx_http_clear_content_length(r) \ \
--- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -532,10 +532,14 @@ ngx_http_upstream_cache(ngx_http_request ngx_int_t rc; ngx_http_cache_t *c; - if (!(r->method & NGX_HTTP_GET)) { + if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) { return NGX_DECLINED; } + if (r->method & NGX_HTTP_HEAD) { + u->method = ngx_http_core_get_method; + } + c = ngx_pcalloc(r->pool, sizeof(ngx_http_cache_t)); if (c == NULL) { return NGX_ERROR; @@ -1821,11 +1825,23 @@ ngx_http_upstream_send_response(ngx_http rc = ngx_http_send_header(r); - if (rc == NGX_ERROR || rc > NGX_OK || r->post_action || r->header_only) { + if (rc == NGX_ERROR || rc > NGX_OK || r->post_action) { ngx_http_upstream_finalize_request(r, u, rc); return; } + if (r->header_only) { + if (u->cacheable || u->store) { + r->read_event_handler = ngx_http_request_empty_handler; + r->write_event_handler = ngx_http_request_empty_handler; + r->connection->error = 1; + + } else { + ngx_http_upstream_finalize_request(r, u, rc); + return; + } + } + u->header_sent = 1; if (r->request_body && r->request_body->temp_file) {