comparison src/http/v2/ngx_http_v2.c @ 9260:ac5635650bc6

Request body: handling of body after unbuffered reading. As long as unbuffered reading of the request body was used, and an attempt to read the request body is made again, such as when redirecting the request to an error page, the request body is now cleared to make sure it can be used safely. Further, the r->reading_body flag, if it is still set, is cleared (along with disabling keepalive and enabling lingering close), so the code which uses the request body, such as when proxying, is not confused and doesn't try to use "Transfer-Encoding: chunked". Note that this change makes the workaround for HTTP/2 issues with unbuffered proxying and error pages, as introduced in 7561:9f1f9d6e056a, ineffective (since r->reading_body now cleared along with r->reading_body_no_buffering). Though the workaround is anyway not needed after 7924:d9e009b39596, hence it is removed. This makes it safer to use complex processing of error pages with unbuffered proxying.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 27 Apr 2024 18:22:07 +0300
parents 81082b5521dd
children 388a801e9bb9
comparison
equal deleted inserted replaced
9259:81082b5521dd 9260:ac5635650bc6
1076 } 1076 }
1077 1077
1078 r = stream->request; 1078 r = stream->request;
1079 fc = r->connection; 1079 fc = r->connection;
1080 1080
1081 if (r->reading_body && !r->request_body_no_buffering) {
1082 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
1083 "skipping http2 DATA frame");
1084
1085 return ngx_http_v2_state_skip_padded(h2c, pos, end);
1086 }
1087
1088 if (r->headers_in.content_length_n < 0 && !r->headers_in.chunked) { 1081 if (r->headers_in.content_length_n < 0 && !r->headers_in.chunked) {
1089 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0, 1082 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
1090 "skipping http2 DATA frame"); 1083 "skipping http2 DATA frame");
1091 1084
1092 return ngx_http_v2_state_skip_padded(h2c, pos, end); 1085 return ngx_http_v2_state_skip_padded(h2c, pos, end);