mirror of
https://github.com/nginx/nginx.git
synced 2025-08-06 14:56:15 +08:00
HTTP/2: reduced difference to HTTP/1.x in reading request body.
Particularly, this eliminates difference in behavior for requests without body and deduplicates code. Prodded by Piotr Sikora.
This commit is contained in:
parent
d35c83a325
commit
55b37eff8f
@ -46,13 +46,6 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
#if (NGX_HTTP_V2)
|
||||
if (r->stream) {
|
||||
rc = ngx_http_v2_read_request_body(r, post_handler);
|
||||
goto done;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ngx_http_test_expect(r) != NGX_OK) {
|
||||
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
goto done;
|
||||
@ -85,6 +78,13 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
#if (NGX_HTTP_V2)
|
||||
if (r->stream) {
|
||||
rc = ngx_http_v2_read_request_body(r);
|
||||
goto done;
|
||||
}
|
||||
#endif
|
||||
|
||||
preread = r->header_in->last - r->header_in->pos;
|
||||
|
||||
if (preread) {
|
||||
@ -805,7 +805,11 @@ ngx_http_test_expect(ngx_http_request_t *r)
|
||||
|
||||
if (r->expect_tested
|
||||
|| r->headers_in.expect == NULL
|
||||
|| r->http_version < NGX_HTTP_VERSION_11)
|
||||
|| r->http_version < NGX_HTTP_VERSION_11
|
||||
#if (NGX_HTTP_V2)
|
||||
|| r->stream != NULL
|
||||
#endif
|
||||
)
|
||||
{
|
||||
return NGX_OK;
|
||||
}
|
||||
|
@ -3522,8 +3522,7 @@ ngx_http_v2_run_request(ngx_http_request_t *r)
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_http_v2_read_request_body(ngx_http_request_t *r,
|
||||
ngx_http_client_body_handler_pt post_handler)
|
||||
ngx_http_v2_read_request_body(ngx_http_request_t *r)
|
||||
{
|
||||
off_t len;
|
||||
size_t size;
|
||||
@ -3536,33 +3535,14 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r,
|
||||
ngx_http_v2_connection_t *h2c;
|
||||
|
||||
stream = r->stream;
|
||||
rb = r->request_body;
|
||||
|
||||
if (stream->skip_data) {
|
||||
r->request_body_no_buffering = 0;
|
||||
post_handler(r);
|
||||
rb->post_handler(r);
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
rb = ngx_pcalloc(r->pool, sizeof(ngx_http_request_body_t));
|
||||
if (rb == NULL) {
|
||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* set by ngx_pcalloc():
|
||||
*
|
||||
* rb->bufs = NULL;
|
||||
* rb->buf = NULL;
|
||||
* rb->received = 0;
|
||||
* rb->free = NULL;
|
||||
* rb->busy = NULL;
|
||||
*/
|
||||
|
||||
rb->rest = 1;
|
||||
rb->post_handler = post_handler;
|
||||
|
||||
r->request_body = rb;
|
||||
|
||||
h2scf = ngx_http_get_module_srv_conf(r, ngx_http_v2_module);
|
||||
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
||||
|
||||
@ -3612,6 +3592,8 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r,
|
||||
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
|
||||
rb->rest = 1;
|
||||
|
||||
buf = stream->preread;
|
||||
|
||||
if (stream->in_closed) {
|
||||
|
@ -264,8 +264,7 @@ ngx_http_v2_queue_blocked_frame(ngx_http_v2_connection_t *h2c,
|
||||
void ngx_http_v2_init(ngx_event_t *rev);
|
||||
void ngx_http_v2_request_headers_init(void);
|
||||
|
||||
ngx_int_t ngx_http_v2_read_request_body(ngx_http_request_t *r,
|
||||
ngx_http_client_body_handler_pt post_handler);
|
||||
ngx_int_t ngx_http_v2_read_request_body(ngx_http_request_t *r);
|
||||
ngx_int_t ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r);
|
||||
|
||||
void ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc);
|
||||
|
Loading…
Reference in New Issue
Block a user