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