<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div>WOW thanks for the quick and elaborate response</div><div><br></div><div>So what is the right way to send response with status code 302 on GET request but</div><div>with content length 0 and no body (I want to redirect the request to other Server)</div><div><br></div><div>Thanks <br></div><div>Hagai<br></div><div><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; margin-top: 5px; padding-left: 5px;">  <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <font size="2" face="Arial"> <hr size="1">  <b><span style="font-weight:bold;">From:</span></b> Maxim Dounin <mdounin@mdounin.ru><br> <b><span style="font-weight: bold;">To:</span></b> nginx@nginx.org <br>
 <b><span style="font-weight: bold;">Sent:</span></b> Monday, April 16, 2012 12:37 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: ngx_http_send_special_response<br> </font> </div> <br>
Hello!<br><br>On Mon, Apr 16, 2012 at 01:53:39AM -0700, hagai avrahami wrote:<br><br>> <br>> <br>> Hi<br>> <br>> I am appreciate any help I can get on the following issues.<br>> <br>> I am writing my own module.<br>> <br>> 1. I can see in function ngx_http_send_special_response<br>>     that it calculates the content length of the error page even if the request signed as header only (r->header_only = 1)<br>>     and set the content length header with value, after sending the header it does not send the body ( because  r->header_only = 1)<br>>     so the response arrive with content length different than 0 but without body <br>> <br>>     Is it a BUG?<br><br>No.  The r->header_only flag should is set when body isn't <br>expected per protocol (HEAD requests, 304 responses).  Having <br>Content-Length present in such responses is
 ok.<br><br>> 2.In the module I am trying to redirect the request with status code 302 (NGX_HTTP_MOVED_TEMPORARILY)<br>>    Trying to user->headers_out.location for the Alternate URL failed, I looked in the code and saw the Location must start with "/" - why?<br><br>You have to set it correctly, i.e. add to r->headers_out.headers <br>and link to r->headers_out.location.  If it starts with "/" it <br>works even if set incorrectly due to adding of a server_name, <br>that's probably what confused you.<br><br>>    In the end I add it to r->headers_out.headers<br>>    using header = ngx_list_push(&r->headers_out.headers);<br>>    Is it the write way to do it?<br>> <br>> 3. Can you explain please the different between<br>>     a. r->headers_out.content_length_n<br>>     b. r->headers_out.content_length<br><br>The content_length_n is a
 numeric length, this what you normaly <br>should set when generating response in nginx.  The content_length <br>is a pointer to a headers array element, it might be present if <br>there is string representation of a Content-Length header <br>available for some reason (e.g. from a backend).<br><br>> 4. Can you explain the usage of the hash field in ngx_table_elt_t<br><br>Normally the hash field is used for fast lookups in hash <br>structures.  In case of r->headers_out it's usually just set to 1 <br>indicate the header is valid (or reset to 0 to indicate the <br>header should not be sent as it was superseeded by some other <br>header).<br><br>Maxim Dounin<br><br>_______________________________________________<br>nginx mailing list<br><a ymailto="mailto:nginx@nginx.org" href="mailto:nginx@nginx.org">nginx@nginx.org</a><br>http://mailman.nginx.org/mailman/listinfo/nginx<br><br> </div> </div> </blockquote></div>   </div></body></html>