aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2006-10-02 10:22:51 +0000
committerIgor Sysoev <igor@sysoev.ru>2006-10-02 10:22:51 +0000
commit8fd830adc0a3bcdcf471237e2c4445d15e64face (patch)
tree45625134d5a27490442c031ba404d49f32c069be
parent8c0dec813f2ce4b29c94452dfda16908a3927800 (diff)
downloadnginx-8fd830adc0a3bcdcf471237e2c4445d15e64face.tar.gz
nginx-8fd830adc0a3bcdcf471237e2c4445d15e64face.zip
set "Content-Length: 0" for errors handled by "return 204"
-rw-r--r--src/http/ngx_http_request.h1
-rw-r--r--src/http/ngx_http_script.c1
-rw-r--r--src/http/ngx_http_special_response.c39
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) {