the keepalive problem when using redirection in code

Maxim Dounin mdounin at mdounin.ru
Thu Oct 22 14:03:20 MSD 2009


Hello!

On Thu, Oct 22, 2009 at 05:30:47AM -0400, wangbin579 wrote:

> the code is as the following:
>        header->hash = 1;
> 	header->key.len = sizeof("Location") - 1;
> 	header->key.data=(u_char *) "Location";
> 	header->value.len = strlen(param->redirectUrl);
> 	header->value.data=(u_char*)param->redirectUrl;
> 	r->header_only=1;
> 	r->headers_out.content_length_n=0;
> 	r->headers_out.content_type.len = sizeof("text/html") - 1;
> 	r->headers_out.content_type.data = (u_char *) "text/html";
> 	r->headers_out.status = NGX_HTTP_OK;
> 	
> 	return NGX_HTTP_MOVED_TEMPORARILY;
> 
> when using keepalive (65s),the http responce will return in more than  65s .
> 
> I use two methods
> 1. if I send some contents back(so r->header_only=0),the phenomena is gone,the http responce return normally.
> 2. If I set r->keepalive=0,the phenomena is also gone,the http responce return normally.
> 
> Are the  above methods right?

No, the above code breaks http standard as it returns response 
without message body with 302 code to arbitrary requests.  And 
this is why it breaks keepalive connections.

Consult RFC 2616 for details.

Maxim Dounin





More information about the nginx mailing list