Как стать автором
Обновить

Комментарии 12

А разве RoR не может просто слать тот заголовок, который хочет отправить разработчик (как в PHP через header функцию)? Тема с конфигом смотрится как-то… хм… непривычно.
НЛО прилетело и опубликовало эту надпись здесь
А разве эта строчка из конфига гарантирует переносимость кода без его изменения?

PHP header я привел как пример. Определение типа используемого веб сервера и выдачу нужного заголовка реализуема и там.
Раскомментировали строчку — работает X-Accel-Redirect, закомментировали — sendfile(), вот вам и переносимость.

Суть в том, что разработчик приложения не парится, что там в данный момент используются и где вообще лежит статика, а просто зовет функцию send_file(), когда хочет отправить файл (логично, не правда ли?), и она за него делает всю магию. С php тут даже смешно сравнивать.
Фреймворк с языком действительно смешно сравнивать. А если серьезно, то на php или любом другом языке это реализуется точно также.
Вся идея рушится, когда разработчик пытается отправить файл из неожиданного расположения, например /tmp/my_cool_file.txt
А не надо пытаться это делать. Не надо вообще разрешать это делать. Сегодня этого хочет разработчик, а завтра этим воспользуется злоумышленник. Организуйте структуру вашего приложения, чтобы она была четкой и понятной, и файлы, которые нужно отдавать клиенту, все лежали в одном строго определенном месте.
Я с вами полностью согласен, просто уже который раз на подобную фигню натыкаюсь в сторонних приложениях, на этот раз Redmine (выкачивают в /tmp файлы из репозитория для возможности отправки через web-интерфейс). Честно говоря, редмайн часто выбешивает своим кодом.
Из поста это не понятно, но рельса при send_file занимает воркера, когда в случае из поста обработка отправки производится nginx-ом.
Я о другом. Что мешает выдать требуемый header и завершить работу не «занимает воркера»?
строка config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
этим и занимается
В принципе, можно было бы еще рассказать про aio в nginx.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации