diff options
author | Igor Sysoev <igor@sysoev.ru> | 2006-10-02 10:22:51 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2006-10-02 10:22:51 +0000 |
commit | 8fd830adc0a3bcdcf471237e2c4445d15e64face (patch) | |
tree | 45625134d5a27490442c031ba404d49f32c069be | |
parent | 8c0dec813f2ce4b29c94452dfda16908a3927800 (diff) | |
download | nginx-8fd830adc0a3bcdcf471237e2c4445d15e64face.tar.gz nginx-8fd830adc0a3bcdcf471237e2c4445d15e64face.zip |
set "Content-Length: 0" for errors handled by "return 204"
-rw-r--r-- | src/http/ngx_http_request.h | 1 | ||||
-rw-r--r-- | src/http/ngx_http_script.c | 1 | ||||
-rw-r--r-- | src/http/ngx_http_special_response.c | 39 |
3 files changed, 25 insertions, 16 deletions
diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h index b9ad2b54d..08ccd1348 100644 --- a/src/http/ngx_http_request.h +++ b/src/http/ngx_http_request.h @@ -430,6 +430,7 @@ struct ngx_http_request_s { unsigned plain_http:1; unsigned chunked:1; unsigned header_only:1; + unsigned zero_body:1; unsigned keepalive:1; unsigned lingering_close:1; unsigned discard_body:1; diff --git a/src/http/ngx_http_script.c b/src/http/ngx_http_script.c index 3a9e2a85b..e8bce1911 100644 --- a/src/http/ngx_http_script.c +++ b/src/http/ngx_http_script.c @@ -841,6 +841,7 @@ ngx_http_script_return_code(ngx_http_script_engine_t *e) if (code->status == NGX_HTTP_NO_CONTENT) { e->request->header_only = 1; + e->request->zero_body = 1; } e->ip += sizeof(ngx_http_script_return_code_t) - sizeof(uintptr_t); diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c index d249c272e..c8190ed18 100644 --- a/src/http/ngx_http_special_response.c +++ b/src/http/ngx_http_special_response.c @@ -455,25 +455,32 @@ ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error) msie_padding = 0; - if (error_pages[err].len) { - r->headers_out.content_length_n = error_pages[err].len - + sizeof(error_tail) - 1; - - if (clcf->msie_padding - && r->headers_in.msie - && r->http_version >= NGX_HTTP_VERSION_10 - && error >= NGX_HTTP_BAD_REQUEST - && error != NGX_HTTP_REQUEST_URI_TOO_LARGE) - { - r->headers_out.content_length_n += sizeof(ngx_http_msie_stub) - 1; - msie_padding = 1; - } + if (!r->zero_body) { + if (error_pages[err].len) { + r->headers_out.content_length_n = error_pages[err].len + + sizeof(error_tail) - 1; + + if (clcf->msie_padding + && r->headers_in.msie + && r->http_version >= NGX_HTTP_VERSION_10 + && error >= NGX_HTTP_BAD_REQUEST + && error != NGX_HTTP_REQUEST_URI_TOO_LARGE) + { + r->headers_out.content_length_n += + sizeof(ngx_http_msie_stub) - 1; + msie_padding = 1; + } - r->headers_out.content_type.len = sizeof("text/html") - 1; - r->headers_out.content_type.data = (u_char *) "text/html"; + r->headers_out.content_type.len = sizeof("text/html") - 1; + r->headers_out.content_type.data = (u_char *) "text/html"; + + } else { + r->headers_out.content_length_n = -1; + } } else { - r->headers_out.content_length_n = -1; + r->headers_out.content_length_n = 0; + err = 0; } if (r->headers_out.content_length) { |