нетривиальная обработка POST во встроенном перле

Daniel Podolsky onokonem на gmail.com
Вс Фев 7 00:40:23 MSK 2010


День добрый!

Есть клиент, писанный - не мной - на яваскрипте. Работает в браузере.

Среди прочего клиент загружает на сервер файлы. И имеет встроенный
измеритель прогресса. Этот измеритель регулярно ходит на сервер, и
спрашивает о ходе загрузки.

Сервер теперь находится за nginxом.

И, естественно, измеритель не работает - бекенд про загрузку узнает
только по фактическом окончании ее. Правильно я понимаю, что ничего не
изменилось, и небуферизованная отправка на бекенд не поддерживается?

Все бы ничего, но неработающий измеритель ломает все функционирование
клиента. Исправить клиента нет возможности.

Поэтому я перехватываю запросы измерителя, и отвечаю ему, что прогресс
- 0%. Клиент функционирует нормально, но пользователи недовольны
поведением червяка.

Вопрос - можно ли узнать имя файла, в который будет буферизоваться
тело поста, до окончания его приема? Я бы сравнивал его размер с
обещанным, и говорил бы клиенту правду о прогрессе. Или есть
какой-нибудь другой способ узнать, сколько именно данных мы уже
получили?

И второй вопрос.

Пользователи грузят 60-ти мегабайтные  csv, которые прекрасно жмутся -
раз в 20. Сервер, однако, зипованную загрузку не поддерживает.

Есть ли способ подменить тело запроса на разжатое перед передачей к
бекенду? Или способ сделать асинхронный  http запрос из обработчика?
Понятно, что можно переправить запрос на апач, и там сделать все. Но
вдруг кто уже ходил этой дорогой?

Спасибо.

С уважением,
Даниил Подольский.


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