comparison src/http/ngx_http_special_response.c @ 4957:7556a7acb14f stable-1.2

Merge of r4921, r4922, r4923, r4924, r4925: request body fixes. *) Request body: fixed "501 Not Implemented" error handling. It is not about "Method" but a generic message, and is expected to be used e.g. if specified Transfer-Encoding is not supported. Fixed message to match RFC 2616. Additionally, disable keepalive on such errors as we won't be able to read request body correctly if we don't understand Transfer-Encoding used. *) Request body: $request_body variable generalization. The $request_body variable was assuming there can't be more than two buffers. While this is currently true due to request body reading implementation details, this is not a good thing to depend on and may change in the future. *) Request body: code duplication reduced, no functional changes. The r->request_body_in_file_only with empty body case is now handled in ngx_http_write_request_body(). *) Request body: fixed socket leak on errors. The r->main->count reference counter was always incremented in ngx_http_read_client_request_body(), while it is only needs to be incremented on positive returns. *) Request body: properly handle events while discarding body. An attempt to call ngx_handle_read_event() before actually reading data from a socket might result in read event being disabled, which is wrong. Catched by body.t test on Solaris.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 11 Dec 2012 13:18:50 +0000
parents d11f86a16e3b
children
comparison
equal deleted inserted replaced
4956:bbcaeccbd928 4957:7556a7acb14f
258 ; 258 ;
259 259
260 260
261 static char ngx_http_error_501_page[] = 261 static char ngx_http_error_501_page[] =
262 "<html>" CRLF 262 "<html>" CRLF
263 "<head><title>501 Method Not Implemented</title></head>" CRLF 263 "<head><title>501 Not Implemented</title></head>" CRLF
264 "<body bgcolor=\"white\">" CRLF 264 "<body bgcolor=\"white\">" CRLF
265 "<center><h1>501 Method Not Implemented</h1></center>" CRLF 265 "<center><h1>501 Not Implemented</h1></center>" CRLF
266 ; 266 ;
267 267
268 268
269 static char ngx_http_error_502_page[] = 269 static char ngx_http_error_502_page[] =
270 "<html>" CRLF 270 "<html>" CRLF
382 case NGX_HTTP_REQUEST_URI_TOO_LARGE: 382 case NGX_HTTP_REQUEST_URI_TOO_LARGE:
383 case NGX_HTTP_TO_HTTPS: 383 case NGX_HTTP_TO_HTTPS:
384 case NGX_HTTPS_CERT_ERROR: 384 case NGX_HTTPS_CERT_ERROR:
385 case NGX_HTTPS_NO_CERT: 385 case NGX_HTTPS_NO_CERT:
386 case NGX_HTTP_INTERNAL_SERVER_ERROR: 386 case NGX_HTTP_INTERNAL_SERVER_ERROR:
387 case NGX_HTTP_NOT_IMPLEMENTED:
387 r->keepalive = 0; 388 r->keepalive = 0;
388 } 389 }
389 } 390 }
390 391
391 if (r->lingering_close) { 392 if (r->lingering_close) {