mirror of
https://github.com/nginx/nginx.git
synced 2025-08-06 14:56:15 +08:00
Merged with the default branch.
This commit is contained in:
commit
f27686cf38
1
.hgtags
1
.hgtags
@ -463,3 +463,4 @@ ffcbb9980ee2bad27b4d7b1cd680b14ff47b29aa release-1.19.10
|
|||||||
df34dcc9ac072ffd0945e5a1f3eb7987e8275375 release-1.21.0
|
df34dcc9ac072ffd0945e5a1f3eb7987e8275375 release-1.21.0
|
||||||
a68ac0677f8553b1f84d357bc9da114731ab5f47 release-1.21.1
|
a68ac0677f8553b1f84d357bc9da114731ab5f47 release-1.21.1
|
||||||
bfbc52374adcbf2f9060afd62de940f6fab3bba5 release-1.21.2
|
bfbc52374adcbf2f9060afd62de940f6fab3bba5 release-1.21.2
|
||||||
|
2217a9c1d0b86026f22700b3c089545db1964f55 release-1.21.3
|
||||||
|
@ -5,6 +5,33 @@
|
|||||||
<change_log title="nginx">
|
<change_log title="nginx">
|
||||||
|
|
||||||
|
|
||||||
|
<changes ver="1.21.3" date="2021-09-07">
|
||||||
|
|
||||||
|
<change type="change">
|
||||||
|
<para lang="ru">
|
||||||
|
оптимизация чтения тела запроса
|
||||||
|
при использовании HTTP/2.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
optimization of client request body reading
|
||||||
|
when using HTTP/2.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
во внутреннем API для обработки тела запроса
|
||||||
|
при использовании HTTP/2 и буферизации обрабатываемых данных.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
in request body filters internal API
|
||||||
|
when using HTTP/2 and buffering of the data being processed.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
</changes>
|
||||||
|
|
||||||
|
|
||||||
<changes ver="1.21.2" date="2021-08-31">
|
<changes ver="1.21.2" date="2021-08-31">
|
||||||
|
|
||||||
<change type="change">
|
<change type="change">
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
#define _NGINX_H_INCLUDED_
|
#define _NGINX_H_INCLUDED_
|
||||||
|
|
||||||
|
|
||||||
#define nginx_version 1021002
|
#define nginx_version 1021003
|
||||||
#define NGINX_VERSION "1.21.2"
|
#define NGINX_VERSION "1.21.3"
|
||||||
#define NGINX_VER "nginx/" NGINX_VERSION
|
#define NGINX_VER "nginx/" NGINX_VERSION
|
||||||
|
|
||||||
#ifdef NGX_BUILD
|
#ifdef NGX_BUILD
|
||||||
|
@ -1092,7 +1092,7 @@ static u_char *
|
|||||||
ngx_http_v2_state_read_data(ngx_http_v2_connection_t *h2c, u_char *pos,
|
ngx_http_v2_state_read_data(ngx_http_v2_connection_t *h2c, u_char *pos,
|
||||||
u_char *end)
|
u_char *end)
|
||||||
{
|
{
|
||||||
size_t size, window;
|
size_t size;
|
||||||
ngx_buf_t *buf;
|
ngx_buf_t *buf;
|
||||||
ngx_int_t rc;
|
ngx_int_t rc;
|
||||||
ngx_connection_t *fc;
|
ngx_connection_t *fc;
|
||||||
@ -1148,32 +1148,6 @@ ngx_http_v2_state_read_data(ngx_http_v2_connection_t *h2c, u_char *pos,
|
|||||||
ngx_http_finalize_request(r, rc);
|
ngx_http_finalize_request(r, rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc == NGX_AGAIN && !stream->no_flow_control) {
|
|
||||||
buf = r->request_body->buf;
|
|
||||||
window = buf->end - buf->last;
|
|
||||||
|
|
||||||
window -= h2c->state.length - size;
|
|
||||||
|
|
||||||
if (window < stream->recv_window) {
|
|
||||||
ngx_log_error(NGX_LOG_ALERT, h2c->connection->log, 0,
|
|
||||||
"http2 negative window update");
|
|
||||||
return ngx_http_v2_connection_error(h2c,
|
|
||||||
NGX_HTTP_V2_INTERNAL_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window > stream->recv_window) {
|
|
||||||
if (ngx_http_v2_send_window_update(h2c, stream->node->id,
|
|
||||||
window - stream->recv_window)
|
|
||||||
== NGX_ERROR)
|
|
||||||
{
|
|
||||||
return ngx_http_v2_connection_error(h2c,
|
|
||||||
NGX_HTTP_V2_INTERNAL_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
stream->recv_window = window;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ngx_http_run_posted_requests(fc);
|
ngx_http_run_posted_requests(fc);
|
||||||
|
|
||||||
} else if (size) {
|
} else if (size) {
|
||||||
@ -4214,8 +4188,8 @@ ngx_http_v2_process_request_body(ngx_http_request_t *r, u_char *pos,
|
|||||||
|
|
||||||
/* update chains */
|
/* update chains */
|
||||||
|
|
||||||
ngx_log_error(NGX_LOG_DEBUG, fc->log, 0,
|
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, fc->log, 0,
|
||||||
"http2 body update chains");
|
"http2 body update chains");
|
||||||
|
|
||||||
rc = ngx_http_v2_filter_request_body(r);
|
rc = ngx_http_v2_filter_request_body(r);
|
||||||
|
|
||||||
@ -4255,22 +4229,6 @@ ngx_http_v2_process_request_body(ngx_http_request_t *r, u_char *pos,
|
|||||||
rb->rest = 0;
|
rb->rest = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->request_body_no_buffering) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* pass buffer to request body filter chain */
|
|
||||||
|
|
||||||
rc = ngx_http_v2_filter_request_body(r);
|
|
||||||
|
|
||||||
if (rc != NGX_OK) {
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rb->rest == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4279,6 +4237,14 @@ ngx_http_v2_process_request_body(ngx_http_request_t *r, u_char *pos,
|
|||||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
|
||||||
"http2 request body rest %O", rb->rest);
|
"http2 request body rest %O", rb->rest);
|
||||||
|
|
||||||
|
if (flush) {
|
||||||
|
rc = ngx_http_v2_filter_request_body(r);
|
||||||
|
|
||||||
|
if (rc != NGX_OK) {
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (rb->rest == 0 && rb->last_saved) {
|
if (rb->rest == 0 && rb->last_saved) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -4287,9 +4253,8 @@ ngx_http_v2_process_request_body(ngx_http_request_t *r, u_char *pos,
|
|||||||
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
||||||
ngx_add_timer(fc->read, clcf->client_body_timeout);
|
ngx_add_timer(fc->read, clcf->client_body_timeout);
|
||||||
|
|
||||||
if (r->request_body_no_buffering) {
|
if (!flush) {
|
||||||
ngx_post_event(fc->read, &ngx_posted_events);
|
ngx_post_event(fc->read, &ngx_posted_events);
|
||||||
return NGX_AGAIN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NGX_AGAIN;
|
return NGX_AGAIN;
|
||||||
@ -4301,7 +4266,10 @@ ngx_http_v2_process_request_body(ngx_http_request_t *r, u_char *pos,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (r->request_body_no_buffering) {
|
if (r->request_body_no_buffering) {
|
||||||
ngx_post_event(fc->read, &ngx_posted_events);
|
if (!flush) {
|
||||||
|
ngx_post_event(fc->read, &ngx_posted_events);
|
||||||
|
}
|
||||||
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4455,14 +4423,26 @@ ngx_http_v2_read_client_request_body_handler(ngx_http_request_t *r)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (r->stream->no_flow_control) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (r->request_body->rest == 0) {
|
if (r->request_body->rest == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (r->request_body->busy != NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
stream = r->stream;
|
stream = r->stream;
|
||||||
h2c = stream->connection;
|
h2c = stream->connection;
|
||||||
|
|
||||||
buf = r->request_body->buf;
|
buf = r->request_body->buf;
|
||||||
|
|
||||||
|
buf->pos = buf->start;
|
||||||
|
buf->last = buf->start;
|
||||||
|
|
||||||
window = buf->end - buf->start;
|
window = buf->end - buf->start;
|
||||||
|
|
||||||
if (h2c->state.stream == stream) {
|
if (h2c->state.stream == stream) {
|
||||||
@ -4511,7 +4491,6 @@ ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r)
|
|||||||
ngx_connection_t *fc;
|
ngx_connection_t *fc;
|
||||||
ngx_http_v2_stream_t *stream;
|
ngx_http_v2_stream_t *stream;
|
||||||
ngx_http_v2_connection_t *h2c;
|
ngx_http_v2_connection_t *h2c;
|
||||||
ngx_http_core_loc_conf_t *clcf;
|
|
||||||
|
|
||||||
stream = r->stream;
|
stream = r->stream;
|
||||||
fc = r->connection;
|
fc = r->connection;
|
||||||
@ -4535,14 +4514,14 @@ ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r)
|
|||||||
return NGX_HTTP_BAD_REQUEST;
|
return NGX_HTTP_BAD_REQUEST;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ngx_http_v2_filter_request_body(r);
|
rc = ngx_http_v2_process_request_body(r, NULL, 0, r->stream->in_closed, 1);
|
||||||
|
|
||||||
if (rc != NGX_OK) {
|
if (rc != NGX_OK && rc != NGX_AGAIN) {
|
||||||
stream->skip_data = 1;
|
stream->skip_data = 1;
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->request_body->rest == 0 && r->request_body->last_saved) {
|
if (rc == NGX_OK) {
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4590,11 +4569,6 @@ ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r)
|
|||||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stream->recv_window == 0) {
|
|
||||||
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
|
||||||
ngx_add_timer(fc->read, clcf->client_body_timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
stream->recv_window = window;
|
stream->recv_window = window;
|
||||||
|
|
||||||
return NGX_AGAIN;
|
return NGX_AGAIN;
|
||||||
|
Loading…
Reference in New Issue
Block a user