Opened 9 years ago

Closed 9 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 Илья Шипицин 9 years ago.
chunk-reader.ps1 (988 bytes ) - added by Илья Шипицин 9 years ago.
http.png (111.3 KB ) - added by Илья Шипицин 9 years ago.
https.png (190.7 KB ) - added by Илья Шипицин 9 years ago.
nginx.conf-fragment (811 bytes ) - added by Илья Шипицин 9 years ago.

Download all attachments as: .zip

Change History (6)

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

Attachment: chunk.php added

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

Attachment: chunk-reader.ps1 added

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

Attachment: http.png added

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

Attachment: https.png added

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

Attachment: nginx.conf-fragment added

comment:1 by Maxim Dounin, 9 years ago

Resolution: invalid
Status: newclosed

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.