ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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


 




Copyright © Lexa Software, 1996-2009.