Here are my code:
static void v8_embed_handler ( ngx_http_request_t * r )
{
...// generating out chain.
rc = ngx_http_output_filter ( r , out );
while( rc == NGX_AGAIN ) {
if( out->next == NULL )
break;
rc = ngx_http_output_filter ( r , out->next );
out = out->next;
}
ngx_http_finalize_request ( r , rc );
}
static ngx_int_t ngx_http_v8_handler_request(ngx_http_request_t *r)
{
ngx_int_t rc = NGX_DONE ;
rc = ngx_http_read_client_request_body ( r , v8_embed_handler ) ; // call the v8_embed_handler handler to process the post data
if ( rc >= NGX_HTTP_SPECIAL_RESPONSE )
return rc;
return NGX_DONE;
}
Then I changed the code as :
static void v8_embed_handler ( ngx_http_request_t * r )
{
...// generating out chain.
ngx_http_finalize_request ( r , ngx_http_output_filter ( r , out ) );
}
However, it doesn't change the test result. If the response is larger than 64Kb, the problem is still there.
I'm using curl to test it. It firstly output 64k response and it says "curl: (18) transfer closed with 19013 bytes remaining to read". Then it output a little part of the remaining response. I don't really understand why.