Sub-Store icon indicating copy to clipboard operation
Sub-Store copied to clipboard

分享链接/订阅链接优化

Open itbencn opened this issue 6 months ago • 28 comments

  1. 复制链接不包含主域名,仅有路径,需手动拼接
    无论是订阅链接还是文件链接,无论时临时访问还是分享链接,复制出来的地址只包含路径部分,不携带主域名,导致用户必须手动添加域名才能正确访问,使用体验不佳,建议复制时自动包含完整 URL。

  2. 分享链接不同订阅对象却提示 token 已存在
    分享链接格式示例:/share/sub/justmysocks?token=123456
    当前逻辑中,token 的唯一性判断似乎未绑定订阅对象名称,导致不同订阅对象使用相同 token 时出现“token 已存在”的错误提示。
    建议:

  • 若 token 仅在订阅对象范围内唯一,则应结合订阅对象名进行唯一性校验;
  • 若 token 保证全局唯一,则分享链接中可以省略订阅对象名,简化 URL。

itbencn avatar Jun 09 '25 09:06 itbencn

  1. 无法复现. 能提供一套完整复现方式吗?
  2. 但是用户不需要知道什么范围的唯一. 对用户来说也没啥影响. 唯一受影响的应该是不同的资源使用相同的自定义 token... 有待优化...

xream avatar Jun 09 '25 10:06 xream

  1. 后端 2.19.63 已改: token 唯一性检测增加 typename

xream avatar Jun 09 '25 10:06 xream

就是进行一下操作时

  • 复制内部订阅地址
  • 复制分享订阅地址
  • 订阅分享的二维码扫描结果
  • 复制文件内部地址
  • 复制文件分享地址
  • 文件分享的二维码扫描结果
  • 其它没有测试

以上操作得到的地址都不是完整的url只有path部分 比如/share/sub/justmysocks?token=123456 理想的结果应该是https://x.x.com/share/sub/justmysocks?token=123456

itbencn avatar Jun 09 '25 11:06 itbencn

麻烦提供下完整信息吧. 如何跑的后端, 环境变量是啥. 方便我复现下

xream avatar Jun 09 '25 11:06 xream

我测试出结果了,前面提到的问题是由于我配置的后端地址导致的 我最开始配置的

https://sub.example.com?api=/xxxxxxxxxxxxxxxxxxxx

我刚刚配制成

https://sub.example.com?api=https://sub.example.com/xxxxxxxxxxxxxxxxxxxx

所有产生的url地址完整

itbencn avatar Jun 09 '25 12:06 itbencn

@itbencn 难怪...我过会儿改下 感谢反馈

xream avatar Jun 09 '25 12:06 xream

前端 2.15.39 已改

xream avatar Jun 09 '25 13:06 xream

有个建议,仅供参考讨论 目前分享链接太长了

https://sub.example.com/share/file/testfile?token=xxxxxxxxx

直接将token限制为全局唯一,不管是订阅分享还是文件分享保证唯一性 这样就可以省略file/testfile部分 最终链接

https://sub.example.com/xxxxxxxxx 👍️👍️👍️👍️
https://sub.example.com/share/xxxxxxxxx

itbencn avatar Jun 09 '25 13:06 itbencn

之前定的是 https://sub.example.com/share/file/testfile?token=xxxxxxxxx 这样能从 type 和 name 一眼看出是啥

如果有短链接的需求 感觉可以自己反代处理下

xream avatar Jun 09 '25 13:06 xream

之前定的是 https://sub.example.com/share/file/testfile?token=xxxxxxxxx 这样能从 type 和 name 一眼看出是啥

如果有短链接的需求 感觉可以自己反代处理下

赞同,当时客户跟我说我才发现,这玩意如果有需要一堆订阅混起来的时候就很有用了

swysgh avatar Jun 09 '25 13:06 swysgh

如果token保持全局唯一的话,就可以兼容两张模式了

https://sub.example.com/xxxxxxxxx
https://sub.example.com/share/file/testfile?token=xxxxxxxxx

当然这样又和v2.19.63的更新内容冲突了

itbencn avatar Jun 10 '25 08:06 itbencn

@itbencn 嗯 而且还涉及到 url 的问题 现在前端路由和 PWA 那边有写死 api|download|share 相关的配置

xream avatar Jun 10 '25 08:06 xream

懒得重新创建issue了,就在这儿请教一下

前端有个忽略失败的远程订阅没太搞懂怎么用的,我开启此选项 但我有个机场像抽风了一样,订阅地址总是返回HTTP400请求错误,但是最终结果里并没有更新订阅之前的内容

我理解的是这个功能用于出现订阅失败时保持原有内容不变

itbencn avatar Jun 10 '25 08:06 itbencn

@itbencn 默认情况下 远程订阅获取出错就会报错, 导致订阅下载报错. 忽略失败的远程订阅这个功能就是字面意思, 忽略失败的(自然也就不包含它) 订阅不会报错.

你的需求可以用 乐观缓存功能:

例: 原订阅中的远程订阅地址为 https://a.com?token=123

在结尾加上 #cacheKey=nexitally

⚠ 请为不同的订阅设置不同的 cacheKey

即此时 Sub-Store 订阅中的远程订阅地址为 https://a.com?token=123#cacheKey=nexitally

每次使用 Sub-Store 订阅时, 将先返回该缓存的值, 并进行请求尝试更新缓存.

⚠ 可能会将状态码正常 但是内容不为合法订阅的内容写入缓存

你可自行管理 Key 为 sub-store-cached-custom-nexitally 的持久化数据

xream avatar Jun 10 '25 08:06 xream

这个 share 是怎么用的啊

arickxuan avatar Jun 26 '25 09:06 arickxuan

@arickxuan 使用 https://hub.docker.com/r/xream/sub-store 部署后 单条订阅/组合订阅/文件的右边操作里有个分享按钮

xream avatar Jun 26 '25 09:06 xream

有个建议,仅供参考讨论 目前分享链接太长了

https://sub.example.com/share/file/testfile?token=xxxxxxxxx

直接将token限制为全局唯一,不管是订阅分享还是文件分享保证唯一性 这样就可以省略file/testfile部分 最终链接

https://sub.example.com/xxxxxxxxx 👍️👍️👍️👍️
https://sub.example.com/share/xxxxxxxxx

非常棒的提议,在团队内部使用时通常需要一个方便记忆能快速打出来的url地址 完全可以兼容两种模式😀

threerog avatar Jun 26 '25 17:06 threerog

之前定的是 https://sub.example.com/share/file/testfile?token=xxxxxxxxx 这样能从 type 和 name 一眼看出是啥

如果有短链接的需求 感觉可以自己反代处理下

我尝试反向代理无效,总是跳转到substore首页,重定向好像可以

threerog avatar Jun 26 '25 17:06 threerog

@threerog 可能会加一套 https://sub.example.com/share/xxxxxxxxx

但是你的需求 我建议用反代或者自建短链实现

xream avatar Jun 26 '25 17:06 xream

@threerog 自查.jpg

asher534 avatar Jun 26 '25 17:06 asher534

@threerog 我说的反代就是指在反代的配置里加重定向 例如实现 https://a.com/share/a 到 https://a.com/share/col/a?token=xxxxxxxxxxxx 什么叫 "反向代理无效" 现在流行的反代几乎都能实现这个需求

xream avatar Jun 26 '25 17:06 xream

@xream

asher534 avatar Jun 26 '25 17:06 asher534

@threerog 我说的反代就是指在反代的配置里加重定向 例如实现 https://a.com/share/a 到 https://a.com/share/col/a?token=xxxxxxxxxxxx 什么叫 "反向代理无效" 现在流行的反代几乎都能实现这个需求

是我的描述和配置问题,sorry

threerog avatar Jun 26 '25 17:06 threerog

https://a.com/share/sub/123?token=O1XNk-4BDNsFUTWGa72QB?target=ClashMeta

分享的链接 能不能指定类型呢 现在都是base64的 clash中 不能引用

arickxuan avatar Jul 08 '25 07:07 arickxuan

@arickxuan 你的链接参数拼写错误?target=ClashMeta 应该修改为&target=ClashMeta

hsingyin avatar Jul 08 '25 09:07 hsingyin

# 精确匹配 '/xxxx'
location = /xxxx {
    proxy_pass http://127.0.0.1:6005/share/file/public?token=2025;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
}

# 其他匹配
location ^~ / {
    proxy_pass http://127.0.0.1:6005;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
}

我想通过nginx反向代理实现自定义短链,但是貌似没有效果 访问/xxxx还是跳转到了substore页面(页面标题是:地址未找到)

itbencn avatar Oct 21 '25 15:10 itbencn

@itbencn 应该是因为你还是同一个浏览器访问的 所以 PWA 非 share/api/download 路由走前端了 如果你是用于其他代理 App 应该不受影响

xream avatar Oct 21 '25 15:10 xream

@itbencn 应该是因为你还是同一个浏览器访问的 所以 PWA 非 share/api/download 路由走前端了 如果你是用于其他代理 App 应该不受影响

yes ok了

itbencn avatar Oct 21 '25 16:10 itbencn