mirror of
https://github.com/nginx/nginx.git
synced 2024-12-20 06:03:31 -06:00
Request body: $content_length variable to honor real body size.
This allows to handle requests with chunked body by fastcgi and uwsgi modules, and also simplifies handling of various request body modifications.
This commit is contained in:
parent
9a483c8373
commit
0ce5a3aa18
@ -39,6 +39,8 @@ static ngx_int_t ngx_http_variable_tcpinfo(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
#endif
|
||||
|
||||
static ngx_int_t ngx_http_variable_content_length(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_variable_host(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data);
|
||||
static ngx_int_t ngx_http_variable_binary_remote_addr(ngx_http_request_t *r,
|
||||
@ -153,8 +155,8 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
|
||||
{ ngx_string("http_cookie"), NULL, ngx_http_variable_headers,
|
||||
offsetof(ngx_http_request_t, headers_in.cookies), 0, 0 },
|
||||
|
||||
{ ngx_string("content_length"), NULL, ngx_http_variable_header,
|
||||
offsetof(ngx_http_request_t, headers_in.content_length), 0, 0 },
|
||||
{ ngx_string("content_length"), NULL, ngx_http_variable_content_length,
|
||||
0, 0, 0 },
|
||||
|
||||
{ ngx_string("content_type"), NULL, ngx_http_variable_header,
|
||||
offsetof(ngx_http_request_t, headers_in.content_type), 0, 0 },
|
||||
@ -989,6 +991,39 @@ ngx_http_variable_tcpinfo(ngx_http_request_t *r, ngx_http_variable_value_t *v,
|
||||
#endif
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_http_variable_content_length(ngx_http_request_t *r,
|
||||
ngx_http_variable_value_t *v, uintptr_t data)
|
||||
{
|
||||
u_char *p;
|
||||
|
||||
if (r->headers_in.content_length) {
|
||||
v->len = r->headers_in.content_length->value.len;
|
||||
v->data = r->headers_in.content_length->value.data;
|
||||
v->valid = 1;
|
||||
v->no_cacheable = 0;
|
||||
v->not_found = 0;
|
||||
|
||||
} else if (r->headers_in.content_length_n >= 0) {
|
||||
p = ngx_pnalloc(r->pool, NGX_OFF_T_LEN);
|
||||
if (p == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
v->len = ngx_sprintf(p, "%O", r->headers_in.content_length_n) - p;
|
||||
v->data = p;
|
||||
v->valid = 1;
|
||||
v->no_cacheable = 0;
|
||||
v->not_found = 0;
|
||||
|
||||
} else {
|
||||
v->not_found = 1;
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_http_variable_host(ngx_http_request_t *r, ngx_http_variable_value_t *v,
|
||||
uintptr_t data)
|
||||
|
Loading…
Reference in New Issue
Block a user