Re: reverseproxy ломается заголовок ответа Content-Type
Maxim Dounin
mdounin на mdounin.ru
Вт Июл 5 10:33:27 UTC 2016
Hello!
On Tue, Jul 05, 2016 at 03:36:34AM -0400, sergeydeg wrote:
> Да, Вы правы. Дабаг показал, что там всё-таки LineFolding.
> Я изначально смотрел через Fiddler, а он как раз интерпретирует ответ по
> RFC7230.
>
> A user agent that receives an obs-fold in a response message that is
> not within a message/http container MUST replace each received
> obs-fold with one or more SP octets prior to interpreting the field
> value.
>
> А вот NGINX как раз немного косячит IMHO.
> 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 с ошибкой в логах - возможно,
имеет смысл.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru