для дополнительной информации.

водил некоторые исследования по загрузке файлов с контролем доступа, используя Django. Моя цель - полностью заблокировать доступ к файлу, кроме случаев, когда к нему обращается определенный пользователь. Я читал, что при использовании Django X-Sendfile является одним из методов выбора для достижения этой цели (на основе других вопросов SO и т. Д.). Мое элементарное понимание использования X-Sendfile с Django таково:

Пользователь запрашивает URI для получения защищенного файлаПриложение Django решает, какой файл возвращать на основе URL, проверяет разрешение пользователя и т. Д.Приложение Django возвращает HTTP-ответ с заголовком X-Sendfile, в котором указан путь к файлу сервераВеб-сервер находит файл и возвращает его запрашивающей стороне (я полагаю, что веб-сервер также удаляет заголовок X-Sendfile).

По сравнению с переносом файла непосредственно из Django, X-Sendfile, вероятно, является более эффективным методом обеспечения защищенных загрузок (поскольку я могу положиться на Nginx, чтобы обслуживать файлы, против Django), но оставляет для меня 2 вопроса:

Является ли мое объяснение X-Sendfile хотя бы абстрактно правильным?Действительно ли это безопасно при условии, что я не предоставляю нормальный интерфейсный HTTP-доступ (например,http://www.example.com/downloads/secret-file.jpg) в каталог, в котором хранится файл (т.е. не храните его в моемpublic_html каталог)? Или, может, технически подкованный пользователь изучит заголовки и т. Д. И обратный инжиниринг способа доступа к файлу (чтобы затем распространять)?Это действительно большая разница в производительности. Собираюсь ли я перегружать свой сервер приложений, предоставляя 8-битную загрузку 150-мегабайтных файлов напрямую из Django, или это не проблема? Причина, по которой я спрашиваю, состоит в том, что, если обе версии почти равны, версия Django была бы предпочтительнее из-за моей способности делать что-то в Python, например регистрировать количество завершенных загрузок, подсчет пропускной способности загрузок и т. Д.

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос