Skip to content

[Feature] 【面向CDN的优化】希望增加一个选项,允许不启用代理的存储在点击下载按钮时和内置预览中使用/d的链接而不是直接给出最终链接 #1971

@jiwangyihao

Description

@jiwangyihao

请确认以下事项

  • 我已确认阅读并同意 AGPL-3.0 第15条
    本程序不提供任何明示或暗示的担保,使用风险由您自行承担。

  • 我已确认阅读并同意 AGPL-3.0 第16条
    无论何种情况,版权持有人或其他分发者均不对使用本程序所造成的任何损失承担责任。

  • 我确认我的描述清晰,语法礼貌,能帮助开发者快速定位问题,并符合社区规则。

  • 我已确认阅读了OpenList文档

  • 我已确认没有重复的问题或讨论。

  • 我认为此问题必须由OpenList处理,而非第三方。

  • 我已确认此功能尚未被实现。

  • 我已确认此功能是合理的,且有普遍需求,并非我个人需要。

需求描述

现状:

如下图所示,当我们挂载一个网盘(比如OneDrive)并且不启用任何代理的时候,文件页的下载按钮和内置的预览组件都会直接加载最终的OneDrive链接,而不是选择加载OpenList程序托管的/d/xxx链接再进行302跳转

Image Image

当前的现状为什么是合理的/它有什么好处?

在文件详情页点击下载和预览都直接加载最终的OneDrive链接的本质是,服务端将最终的网盘文件真实链接随文件详情页一同下发,与在前端中再次加载/d/xxx相比,少了(至少)一次302跳转以及对应的回源请求,在大多数情况下都很有好处。

情况有了什么变化?

正如我在自己的项目 jiwangyihao/olist-cdn-preheat 中所展示的那样,我们可以使用EdgeOne/ESA的免费CDN搭配回源跟随重定向这个规则让我们的OpenList站点中托管的外部网盘(特别是国外的网盘比如OneDrive)在不增加源站服务器任何负担的情况下,享受到EdgeOne/ESA的稳定链接&文件缓存服务,或者说,实际上我们把ESA/EdgeOne变成了我们的代理服务(而且对于目前的免费版方案中使用回源跟随重定向这个规则实现的效果是完全不限流量&不限访问次数的)。

Image

在我的实际测试中,以ESA为例,在缓存未命中情况下,通过CDN访问OneDrive文件的下载速度大概是500kB/s+(更重要的是连通性变得好了很多),在命中缓存的情况下更能跑到5MB/s+以至10MB/s+(实际上从现有测试来看ESA基本上是完全不限速的),本人的校园网最高速度也只有10MB/s,故本人并不能测出更高的速度。

希望的功能请求,或者说目前的行为有什么问题?

如上所述,在文件详情页中,目前的行为是随着详情页一同下发重定向后的网盘真实文件链接(或者在我的例子里,是OneDrive上的文件链接),这会导致文件详情页中的下载和内置文件预览(比如视频)只能直连OneDrive,跳过了先访问服务端(实质是访问CDN边缘节点),再进行重定向(在无缓存情况下,CDN边缘节点会拦截这个302响应,由边缘节点访问OneDrive,再向用户回传;在有缓存情况下,源站服务器不会收到这个请求,由边缘节点直接回传已缓存的资源)的过程,也就无法享受CDN的代理和缓存

实现思路

希望的效果?

在如下图所示的存储配置中增加一个通用设置,允许自定义目前的详情页处理逻辑,允许禁用随详情页下发重定向后URL这一行为(或者说,允许让文件详情页中的下载按钮和预览链接都指向/d/xxx而不是外部网盘文件真实地址)

Image

附加信息

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions