Re: reverseproxy ломается заголовок ответа Content-Type
Maxim Dounin
mdounin на mdounin.ru
Вт Июл 5 13:32:08 UTC 2016
Hello!
On Tue, Jul 05, 2016 at 02:40:11PM +0300, Andrey Oktyabrskiy wrote:
> On 2016-07-05 13:33, Maxim Dounin wrote:
> >>A proxy or gateway that receives an obs-fold in a response message
> >> that is not within a message/http container MUST either discard the
> >> message and replace it with a 502 (Bad Gateway) response, preferably
> >> with a representation explaining that unacceptable line folding was
> >> received, or replace each received obs-fold with one or more SP
> >> octets prior to interpreting the field value or forwarding the
> >> message downstream.
> >>
> >>То есть он по идее должен либо вернуть 502 ошибку, либо преобразовать
> >>перевод каретки в пробел и отдать клиенту. Но он засовывает значения
> >>после
> >>LineFold в заголовок Connection:
> >
> >Как я уже говорил ранее, nginx не умеет обрабатывать line folding,
> >совсем. Он просто рассматривает это как заголовки, начинающиеся с
> >пробела, и отдаёт клиенту в [почти] том виде, в каком получил от
> >бекенда. Последующее "склеивание" с другим заголовком - лишь
> >следствие того, что заголовок специальный, и из-за этого порядок
> >заголовков в ответе поменялся, и уже ваш клиент, поддерживающий
> >line folding, засунул дополнительные строки в тот заголовок,
> >который оказался перед ними.
> >
> >Допрограммировать в этом месте 502 с ошибкой в логах - возможно,
> >имеет смысл.
> Тогда уж лучше сделать настраиваемым: 502 или склеивать. Не всегда есть
> возможность контролировать поведение бакенда.
Склеивать - вряд ли. Использование folding'а в мире HTTP -
встречается чуть реже, чем практически никогда, и явно запрещено
современными RFC. От попыток склеивать - вреда будет практически
гарантированно больше, чем пользы. Так что с точки зрения nginx'а
гораздо проще просто попращаться с такими бекендами, и больше
никогда не думать о том, что они вообще бывают.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru