Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Transfer-Encoding: chunked для статических файлов
- To: nginx-ru@xxxxxxxxx
- Subject: Re: Transfer-Encoding: chunked для статических файлов
- From: Валентин Бартенев <vbart@xxxxxxxxx>
- Date: Mon, 25 Mar 2013 14:15:15 +0400
- In-reply-to: <CALB9xzAQ=GzF3vRJ8TaLCr7yeZ1NCztNbJ6sCCdvpt3-cr=BTQ@mail.gmail.com>
- Organization: Nginx, Inc.
- References: <CALB9xzAQ=GzF3vRJ8TaLCr7yeZ1NCztNbJ6sCCdvpt3-cr=BTQ@mail.gmail.com>
On Monday 25 March 2013 13:21:28 Руслан Шарипов wrote:
> Добрый день.
>
> Подскажите, поддерживает ли nginx возможность отдавать статические
> файлы чанками?
>
В этом нет практического смысла. Теоретически можно его заставить это делать
через какой-нибудь обработчик, который сделает размер ответа неизвестным
(например пропускать через SSI, sub filter, или addition filter).
> Если запросить ресурс, который 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
>
> Т.е. все хорошо, ответ пришел чанками.
>
Не всегда. Всё зависит от ресурса. Если размер ответа неизвестен, то будет
использоваться chunked transfer encoding, при условии, что клиент его
поддерживает.
> Но если запросить ресурс, который представляет из себя просто
> статичный файл и обрабатывается вот таким 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/kvZma1J
> Y1hc), то штатный http-клиент из tornado позволяет использовать
> streaming_callback
> (http://www.tornadoweb.org/en/stable/httpclient.html) только в том
> случае, если ответ от сервера не "сплошной", а разбит на чанки.
>
Некий Бен скорее всего неправ, и streaming_callback работает вне зависимости
от chunked transfer encoding. Во всяком случае, никаких явных указаний на
обратное я не нашел. И было очень бы странно, если бы он это требовал.
--
Валентин Бартенев
http://nginx.org/en/donation.html
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|