Re: порядок прохождения http-фаз сервера

Oleg lego12239 at yandex.ru
Tue Mar 19 11:25:40 UTC 2013


On Tue, Mar 19, 2013 at 02:55:21PM +0400, Maxim Dounin wrote:
> Hello!
> 
> Так, насколько я понимаю, будет мусор на выходе - сначала ответ 
> 302 без тела, а потом ответ на исходный запрос.  Посмотрите 
> telnet'ом на ответ.

  Да :-). Я это предположил, но проверить забыл.
  Какие-то символы 'ba' в ответе странные:

$ telnet zbox-srv.kvm 80
Trying 192.168.77.26...
Connected to zbox-srv.kvm.
Escape character is '^]'.
GET /zboxweb/user/admin HTTP/1.1
Host: zbox-srv.kvm

HTTP/1.1 307 Temporary Redirect
Server: nginx/1.2.1
Date: Tue, 19 Mar 2013 11:24:40 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Location: http://$host/zboxweb

ba
<html>
<head><title>307 Temporary Redirect</title></head>
<body bgcolor="white">
<center><h1>307 Temporary Redirect</h1></center>
<hr><center>nginx/1.2.1</center>
</body>
</html>

0

quit
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.2.1</center>
</body>
</html>
Connection closed by foreign host.


> Для access-фазы проще всего добавить заголовок location, и вернуть 
> NGX_HTTP_TEMPORARY_REDIRECT (BTW, хочется возвращать именно 307?).  
> Собственно, так же, как и для content-фазы, ибо там есть 
> специальная обработка NGX_HTTP_*.  Как-то так (выдержка из 
> ngx_http_static_module.c):
> 
>     ngx_http_clear_location(r);
> 
>     r->headers_out.location = ngx_palloc(r->pool, sizeof(ngx_table_elt_t));
>     if (r->headers_out.location == NULL) {
>         return NGX_ERROR;
>     }
> 
>     r->headers_out.location->value.len = len;
>     r->headers_out.location->value.data = location;
> 
>     return NGX_HTTP_TEMPORARY_REDIRECT;

  Т.е. устанавливать r->headers_out.status и делать ngx_http_send_header(r)
необязательно?



Подробная информация о списке рассылки nginx-ru