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