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;
|
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) {
|
if (ngx_http_test_expect(r) != NGX_OK) {
|
||||||
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
|
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||||
goto done;
|
goto done;
|
||||||
@ -85,6 +78,13 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
|
|||||||
return NGX_OK;
|
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;
|
preread = r->header_in->last - r->header_in->pos;
|
||||||
|
|
||||||
if (preread) {
|
if (preread) {
|
||||||
@ -805,7 +805,11 @@ ngx_http_test_expect(ngx_http_request_t *r)
|
|||||||
|
|
||||||
if (r->expect_tested
|
if (r->expect_tested
|
||||||
|| r->headers_in.expect == NULL
|
|| 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;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
@ -3522,8 +3522,7 @@ ngx_http_v2_run_request(ngx_http_request_t *r)
|
|||||||
|
|
||||||
|
|
||||||
ngx_int_t
|
ngx_int_t
|
||||||
ngx_http_v2_read_request_body(ngx_http_request_t *r,
|
ngx_http_v2_read_request_body(ngx_http_request_t *r)
|
||||||
ngx_http_client_body_handler_pt post_handler)
|
|
||||||
{
|
{
|
||||||
off_t len;
|
off_t len;
|
||||||
size_t size;
|
size_t size;
|
||||||
@ -3536,33 +3535,14 @@ ngx_http_v2_read_request_body(ngx_http_request_t *r,
|
|||||||
ngx_http_v2_connection_t *h2c;
|
ngx_http_v2_connection_t *h2c;
|
||||||
|
|
||||||
stream = r->stream;
|
stream = r->stream;
|
||||||
|
rb = r->request_body;
|
||||||
|
|
||||||
if (stream->skip_data) {
|
if (stream->skip_data) {
|
||||||
r->request_body_no_buffering = 0;
|
r->request_body_no_buffering = 0;
|
||||||
post_handler(r);
|
rb->post_handler(r);
|
||||||
return NGX_OK;
|
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);
|
h2scf = ngx_http_get_module_srv_conf(r, ngx_http_v2_module);
|
||||||
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_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;
|
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rb->rest = 1;
|
||||||
|
|
||||||
buf = stream->preread;
|
buf = stream->preread;
|
||||||
|
|
||||||
if (stream->in_closed) {
|
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_init(ngx_event_t *rev);
|
||||||
void ngx_http_v2_request_headers_init(void);
|
void ngx_http_v2_request_headers_init(void);
|
||||||
|
|
||||||
ngx_int_t ngx_http_v2_read_request_body(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_int_t ngx_http_v2_read_unbuffered_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);
|
void ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user