Transfer-Encoding: chunked для статических файлов

Руслан Шарипов ufaweb at gmail.com
Mon Mar 25 09:21:28 UTC 2013


Добрый день.

Подскажите, поддерживает ли nginx возможность отдавать статические
файлы чанками?

Если запросить ресурс, который nginx будет проксировать, то
Transfer-Encoding: chunked включается. Например, запрашиваем ресурс,
который формируется wsgi-бэкендом: curl
http://server.example.com/api/v1/file/foobar/status, то ответ будет
таким:

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Mon, 25 Mar 2013 09:09:08 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: close

d
{"status": 0}
0

Т.е. все хорошо, ответ пришел чанками.

Но если запросить ресурс, который представляет из себя просто
статичный файл и обрабатывается вот таким location'ом:

 location /files/ {
  root /home/uploader/receiver;
  chunked_transfer_encoding on;
 }

То имеем такую картину:

Запрос: curl http://server.example.com/files/foobar
Ответ:

HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Mon, 25 Mar 2013 09:05:02 GMT
Content-Type: application/octet-stream
Content-Length: 819098
Last-Modified: Mon, 25 Mar 2013 08:38:21 GMT
Connection: keep-alive
Accept-Ranges: bytes

...data

Т.е. nginx отдает файл "спрошняком", не деля его на чанки. Можно ли
добиться того, чтобы nginx разбивал на чанки не только ответы от
бэкендов, но и статические файлы? (здесь же возникает вопрос, как
настаивать размер чанка)

Спасибо.

p.s. возможно задачу можно решить иначе, поэтому также поясню зачем
мне это надо. Если верить некому Бену
(https://groups.google.com/forum/?fromgroups=#!topic/python-tornado/kvZma1JY1hc),
то штатный http-клиент из tornado позволяет использовать
streaming_callback
(http://www.tornadoweb.org/en/stable/httpclient.html) только в том
случае, если ответ от сервера не "сплошной", а разбит на чанки.

--
С уважением, Шарипов Руслан.
Руководитель отдела разработки и сопровождения программного
обеспечения ОАО "Уфанет".

Контактная информация:
google+: http://gplus.to/ruslan
jid: serafim at jabber.ufanet.ru
wave: ufaweb at googlewave.com
skype: ufaweb
phone: +7(917)4775460
vkontakte: http://vkontakte.ru/ufaweb
myspace: http://www.myspace.com/ufaweb
facebook: http://facebook.com/sharipov
linkedin: http://www.linkedin.com/in/ufaweb
twitter: http://twitter.com/ufaweb


Подробная информация о списке рассылки nginx-ru