mirror of
https://github.com/nginx/nginx.git
synced 2024-12-27 01:11:13 -06:00
Request body: optimized handling of small chunks.
If there is a previous buffer, copy small chunks into it instead of allocating additional buffer.
This commit is contained in:
parent
150cbb017b
commit
130a5e7126
@ -1027,6 +1027,8 @@ ngx_http_request_body_chunked_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
|||||||
|
|
||||||
for (cl = in; cl; cl = cl->next) {
|
for (cl = in; cl; cl = cl->next) {
|
||||||
|
|
||||||
|
b = NULL;
|
||||||
|
|
||||||
for ( ;; ) {
|
for ( ;; ) {
|
||||||
|
|
||||||
ngx_log_debug7(NGX_LOG_DEBUG_EVENT, r->connection->log, 0,
|
ngx_log_debug7(NGX_LOG_DEBUG_EVENT, r->connection->log, 0,
|
||||||
@ -1061,6 +1063,29 @@ ngx_http_request_body_chunked_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
|||||||
return NGX_HTTP_REQUEST_ENTITY_TOO_LARGE;
|
return NGX_HTTP_REQUEST_ENTITY_TOO_LARGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (b
|
||||||
|
&& rb->chunked->size <= 128
|
||||||
|
&& cl->buf->last - cl->buf->pos >= rb->chunked->size)
|
||||||
|
{
|
||||||
|
r->headers_in.content_length_n += rb->chunked->size;
|
||||||
|
|
||||||
|
if (rb->chunked->size < 8) {
|
||||||
|
|
||||||
|
while (rb->chunked->size) {
|
||||||
|
*b->last++ = *cl->buf->pos++;
|
||||||
|
rb->chunked->size--;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ngx_memmove(b->last, cl->buf->pos, rb->chunked->size);
|
||||||
|
b->last += rb->chunked->size;
|
||||||
|
cl->buf->pos += rb->chunked->size;
|
||||||
|
rb->chunked->size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
tl = ngx_chain_get_free_buf(r->pool, &rb->free);
|
tl = ngx_chain_get_free_buf(r->pool, &rb->free);
|
||||||
if (tl == NULL) {
|
if (tl == NULL) {
|
||||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||||
|
Loading…
Reference in New Issue
Block a user