Opened 12 years ago

Closed 12 years ago

#735 closed defect (invalid)

баг с Transfer-Encoding: chunked на https

Reported by: Илья Шипицин Owned by:
Priority: minor Milestone:
Component: nginx-core Version: 1.7.x
Keywords: Cc:
uname -a:
nginx -V: nginx version: nginx/1.7.10
TLS SNI support enabled
configure arguments: --prefix=/usr/local/etc/nginx --with-cc=gcc49 --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --with-debug --with-ipv6 --with-http_geoip_module --http-client-body-temp-path=/var/tmp/nginx/client_body_temp --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp --http-proxy-temp-path=/var/tmp/nginx/proxy_temp --http-log-path=/var/log/nginx-access.log --with-http_geoip_module --with-http_realip_module --with-http_stub_status_module --with-http_sub_module --add-module=/usr/ports/www/nginx/work/nginx-sticky-module-nginx-sticky-module-1.3 --add-module=/usr/ports/www/nginx/work/lua-nginx-module-0.9.15 --with-pcre --with-pcre-jit --with-http_spdy_module --with-http_ssl_module --add-module=/usr/ports/www/nginx/work/simpl-ngx_devel_kit-8dd0df5

Description

вкратце: на https содержимое отдается с ненужной буферизацией

подробно: допустим мы сделаем fastcgi стенд с вот таким приложением (отдает 500 чанков с интервалом 1 секунда): ​https://yadi.sk/d/cWNxpP7JfVBfj:

и разместим его по адресу

​http://chunk.skbkontur.ru
​https://chunk.skbkontur.ru

фрагмент конфига nginx: ​https://yadi.sk/d/LhW_0GWofVBwF

и напишем программу, которая вычитывает чанк за чанком: ​https://yadi.sk/d/C3CQy0s-fVBmb

если читать с http - все зашибись, контент отдается без буферизации, если по https - с буферизацией, это можно посмотреть на скриншотах, например: ​https://yadi.sk/i/WAkPNNMofVBri и ​https://yadi.sk/i/HPedh9IJfVBtn

похожая ситуация описывается вот тут ​http://stackoverflow.com/questions/13672743/eventsource-server-sent-events-through-nginx , и приводится хак "включить proxy_buffering off;" (в случае fastcgi, конечно будет "fastcgi_buffering off;"), в этом случае чанки отдаются так, как предполагается, без задержек.

кажется, что это баг и в случае chunked-кодировки буферизация должна отключаться (на http ведь отключается) на https в том числе

на всякий случай файлики приатачил к тикету

Attachments (5)

chunk.php​ (613 bytes ) - added by Илья Шипицин 12 years ago.
chunk-reader.ps1​ (988 bytes ) - added by Илья Шипицин 12 years ago.
http.png​ (111.3 KB ) - added by Илья Шипицин 12 years ago.
https.png​ (190.7 KB ) - added by Илья Шипицин 12 years ago.
nginx.conf-fragment​ (811 bytes ) - added by Илья Шипицин 12 years ago.

Download all attachments as: .zip

Change History (6)

by Илья Шипицин, 12 years ago

Attachment: chunk.php​ added

by Илья Шипицин, 12 years ago

Attachment: chunk-reader.ps1​ added

by Илья Шипицин, 12 years ago

Attachment: http.png​ added

by Илья Шипицин, 12 years ago

Attachment: https.png​ added

by Илья Шипицин, 12 years ago

Attachment: nginx.conf-fragment​ added

comment:1 by Maxim Dounin, 12 years ago

Resolution: → invalid
Status: new → closed

This isn't a bug. Use of chunked encoding isn't expected to ensure immediate delivery of data. The fact that buffering doesn't happen anywhere with plain http is by chance - e.g., data will also be buffered if gzip is used. If you want to avoid buffering at all, use the ​proxy_buffering directive.

Note: See TracTickets for help on using tickets.