Welcome! Log In Create A New Profile

Advanced

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

Валентин Бартенев
March 25, 2013 06:16AM
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@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

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

Serafim March 25, 2013 05:22AM

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

Валентин Бартенев March 25, 2013 06:16AM

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

ciklop March 27, 2013 06:09AM

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

Валентин Бартенев March 27, 2013 10:02AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 140
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready