Как передать данные через URL Django из стороннего URL без использования перенаправления?
Какие существуют варианты того, как заставить GET "myserver://api/download/12345.jpg"
клиента скачивать с some_cloudfront_server://files/12345.jpg
без перенаправления клиента на этот CloudFront-путь? Т.е. я хочу, чтобы клиент постоянно видел только myserver://api/download/12345.jpg
.
Это должно быть какое-то канальное решение, так как скачивание полного файла сначала на Django-сервер, а затем отправка его клиенту неприменимо (занимает так много времени, что клиент увидит таймаут, прежде чем придет ответ на его запрос). Есть ли какие-нибудь существующие библиотеки для этого? Если мне придется создавать ее самому, я буду рад даже просто советам, с чего начать, поскольку коммуникационный слой Django мне не слишком знаком.
Проблема заключается в том, что мы создаем подписи CloudFront с подстановочными знаками к определенному набору файлов в формате files/<object_id>*
, таким образом позволяя клиенту получить доступ только к определенному объекту ко всем файлам на CloudFront-сервере напрямую. Это прекрасно работает до тех пор, пока трафик доступа к файлам от клиентов невелик. Но если мы начинаем создавать отдельные подписи доступа для сотни различных файлов одновременно, CloudFront начинает дросселировать наши запросы. Решение, к которому я пришел, заключается в создании и хранении на Django-сервере одной общей разрешающей подписи для files/*
, которая используется только Django-сервером и никогда не передается ни одному клиенту, а затем мы позволяем Django-серверу решать, должен ли он получать файлы для клиента или нет. Таким образом, я не могу передать клиенту CloudFront-путь с разрешающей подписью, но я могу направить CloudFront-данные через конечную точку Django клиенту, не показывая ему подпись.
Среда, с которой я работаю, - Django v1.11, а Django REST Framework v3.4 - ViewSets.
Один коллега услышал о моей проблеме и сказал, что подписи можно делать локально на сервере, таким образом, не нужно подключаться к CloudFront каждый раз, когда создается подпись, и мы можем сохранить подписи как специфические для файлов. Он взял эту задачу на себя, поэтому я пока не знаю подробностей.