在Rails 5.2中,Active Storage使我们能够生成永久URL ,该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...
我想知道Active Storage正在添加到整体中的HTTP请求的数量,网页中的一个blob_url =整体中的一个附加请求,以便通过302重定向获取最终的资产url。因此一页包含20张图像=> 20个附加请求。 (但是它们很快)
所以我的问题是:为什么使用这个系统而不是直接使用最终URL(.service_url
):
<img src='https://bucket.amazon/image.jpg?X-Amz-Algo...'>
吗?
我在想这些论点:(但是还有其他吗?)
答案 0 :(得分:4)
Active Storage的即开即用行为是生成指向Rails应用程序的URL。当访问这些URL时,它们将重定向到该文件的实际服务端点。
这确实增加了对Rails应用服务器的请求数量,因为所有文件访问都需要经过那里。
在用户和文件之间使用Rails应用程序有很多好处(其中一些在OP中提到):
这种间接方式将公共URL与实际URL分离开来,并允许(例如)镜像不同服务中的附件以实现高可用性。
有关通过Active Storage Service API提取文件访问的利弊的更多讨论,请查看以下线程: