ActiveStorage: почему бы не использовать service_url вместо blob / option / preview url (редирект 302)? - PullRequest
0 голосов
/ 06 сентября 2018

В Rails 5.2 Active Storage дает нам возможность генерировать постоянные URL , которые перенаправляют на ресурс, с помощью уникальных подписанных URL-адресов при каждом вызове.

HTML: <img src='/rails/active_storage/blobs/ey...' />

Сервер:

Started GET "/rails/active_storage/blobs/eyJfcmFpbH...
302 Redirected to https://bucket.amazon/image.jpg?X-Amz-Algorithm=AWS4-HMA...

Меня интересует количество HTTP-запросов, которые Active Storage добавляет к монолиту, один blob_url на веб-странице = один дополнительный запрос к монолиту, чтобы получить окончательный URL-адрес ресурса с помощью перенаправления 302. Итак, одна страница с 20 изображениями => 20 дополнительных запросов. (но они довольно быстрые)

Итак, мой вопрос: зачем использовать эту систему вместо того, чтобы использовать окончательный URL-адрес напрямую (.service_url):

<img src='https://bucket.amazon/image.jpg?X-Amz-Algo...'>?

Я думаю об этих аргументах: (а есть ли другие?)

  • blob_url может быть кэширован на стороне сервера, потому что он постоянный (пример: кэширование фрагмента )
  • blob_url может быть защищен аутентификацией, это означает, что уникальный URL-адрес может быть предоставлен в общий доступ, но кому-то потребуется аутентификация, например, для просмотра ресурса (путем изменения контроллера BLOB-объектов rails)
  • Может быть, третий? Лучшее кэширование на стороне браузера? Может ли браузер кэшировать данные изображения с помощью постоянного URL? даже если амазонка имеет 5-минутный срок действия?

1 Ответ

0 голосов
/ 15 сентября 2018

Active Storage добавляет слой абстракции к файлам по умолчанию

Стандартное поведение Active Storage заключается в создании URL-адресов, которые указывают на приложение Rails. При обращении эти URL-адреса перенаправляют на фактическую конечную точку службы для файла.

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

У косвенности есть преимущества

Наличие приложения Rails между пользователем и файлами дает несколько преимуществ (некоторые из которых упоминаются в OP):

  • Файлы могут быть защищены аутентификацией
  • Кэширование
  • Зеркальное

Из Активного хранилища :

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

Дебаты по поводу прямого доступа к файлам

Подробнее о плюсах и минусах абстрагирования доступа к файлам через API-интерфейс Active Storage Service можно прочитать в этой ветке:

https://github.com/rails/rails/issues/31419

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...