Re: порядок прохождения http-фаз сервера
Maxim Dounin
mdounin at mdounin.ru
Tue Mar 19 12:42:19 UTC 2013
Hello!
On Tue, Mar 19, 2013 at 03:25:40PM +0400, Oleg wrote:
> On Tue, Mar 19, 2013 at 02:55:21PM +0400, Maxim Dounin wrote:
> > Hello!
> >
> > Так, насколько я понимаю, будет мусор на выходе - сначала ответ
> > 302 без тела, а потом ответ на исходный запрос. Посмотрите
> > telnet'ом на ответ.
>
> Да :-). Я это предположил, но проверить забыл.
> Какие-то символы 'ba' в ответе странные:
Символы 'ba' - это chunked transfer encoding, который используется
потому, что Content-Length ответа не известен на момент отправки
заголовков. Странно, что это единственная вылезающая проблема.
[...]
> > Для 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)
> необязательно?
Нет, возврата NGX_HTTP_TEMPORARY_REDIRECT - достаточно.
--
Maxim Dounin
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru