Re: Теперь нельзя выставлять тип контента!
Maxim Dounin
mdounin at mdounin.ru
Sat Sep 21 23:12:33 UTC 2013
Hello!
On Sat, Sep 21, 2013 at 01:40:04PM -0400, nickolay wrote:
> Здравствуйте,
>
> Обновили nginx до версии 1.5.5 и perl-скрипты перестали отдавать файлы, в
> лог выпадает следующее:
> "header already sent while reading response header from upstream"
>
> Нашёл, что всему виной вот этот коммит:
> http://hg.nginx.org/nginx/rev/03ff14058272
> Он проверяет, если заголовок уже отправлялся, то это ошибка.
И это правильно. Если заголовок пытаются отправить дважды - то
это может привести к непредсказуемым последствиям, лучшее из
которых - битый ответ.
> Но как быть? Нам перед тем как сделать внутренний редирект обязательно нужно
> установить MIME-тип, так как редирект будет на файл без расширения, и если
> не установить явно тип контента, то nginx сам установит
> application/octet-stream.
>
> Устанавливаем из скрипта тип контента таким образом:
> $r->send_http_header("$mime")
>
> Если убрать эту строку, то всё работает, но отдаётся с
> application/octet-stream.
Простейшее решение - отдавать файл perl'ом же, для этого есть
специальный метод $r->sendfile().
http://nginx.org/ru/docs/http/ngx_http_perl_module.html#methods
--
Maxim Dounin
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru