Sub-Store
Sub-Store copied to clipboard
分享链接/订阅链接优化
-
复制链接不包含主域名,仅有路径,需手动拼接
无论是订阅链接还是文件链接,无论时临时访问还是分享链接,复制出来的地址只包含路径部分,不携带主域名,导致用户必须手动添加域名才能正确访问,使用体验不佳,建议复制时自动包含完整 URL。 -
分享链接不同订阅对象却提示 token 已存在
分享链接格式示例:/share/sub/justmysocks?token=123456
当前逻辑中,token 的唯一性判断似乎未绑定订阅对象名称,导致不同订阅对象使用相同 token 时出现“token 已存在”的错误提示。
建议:
- 若 token 仅在订阅对象范围内唯一,则应结合订阅对象名进行唯一性校验;
- 若 token 保证全局唯一,则分享链接中可以省略订阅对象名,简化 URL。
- 无法复现. 能提供一套完整复现方式吗?
- 但是用户不需要知道什么范围的唯一. 对用户来说也没啥影响. 唯一受影响的应该是不同的资源使用相同的自定义 token... 有待优化...
- 后端
2.19.63已改:token唯一性检测增加type和name
就是进行一下操作时
- 复制内部订阅地址
- 复制分享订阅地址
- 订阅分享的二维码扫描结果
- 复制文件内部地址
- 复制文件分享地址
- 文件分享的二维码扫描结果
- 其它没有测试
以上操作得到的地址都不是完整的url只有path部分 比如/share/sub/justmysocks?token=123456
理想的结果应该是https://x.x.com/share/sub/justmysocks?token=123456
麻烦提供下完整信息吧. 如何跑的后端, 环境变量是啥. 方便我复现下
我测试出结果了,前面提到的问题是由于我配置的后端地址导致的 我最开始配置的
https://sub.example.com?api=/xxxxxxxxxxxxxxxxxxxx
我刚刚配制成
https://sub.example.com?api=https://sub.example.com/xxxxxxxxxxxxxxxxxxxx
所有产生的url地址完整
@itbencn 难怪...我过会儿改下 感谢反馈
前端 2.15.39 已改
有个建议,仅供参考讨论 目前分享链接太长了
https://sub.example.com/share/file/testfile?token=xxxxxxxxx
直接将token限制为全局唯一,不管是订阅分享还是文件分享保证唯一性
这样就可以省略file/testfile部分
最终链接
https://sub.example.com/xxxxxxxxx 👍️👍️👍️👍️
https://sub.example.com/share/xxxxxxxxx
之前定的是 https://sub.example.com/share/file/testfile?token=xxxxxxxxx
这样能从 type 和 name 一眼看出是啥
如果有短链接的需求 感觉可以自己反代处理下
之前定的是
https://sub.example.com/share/file/testfile?token=xxxxxxxxx这样能从 type 和 name 一眼看出是啥如果有短链接的需求 感觉可以自己反代处理下
赞同,当时客户跟我说我才发现,这玩意如果有需要一堆订阅混起来的时候就很有用了
如果token保持全局唯一的话,就可以兼容两张模式了
https://sub.example.com/xxxxxxxxx
https://sub.example.com/share/file/testfile?token=xxxxxxxxx
当然这样又和v2.19.63的更新内容冲突了
@itbencn 嗯 而且还涉及到 url 的问题 现在前端路由和 PWA 那边有写死 api|download|share 相关的配置
懒得重新创建issue了,就在这儿请教一下
前端有个忽略失败的远程订阅没太搞懂怎么用的,我开启此选项
但我有个机场像抽风了一样,订阅地址总是返回HTTP400请求错误,但是最终结果里并没有更新订阅之前的内容
我理解的是这个功能用于出现订阅失败时保持原有内容不变
@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 的持久化数据
这个 share 是怎么用的啊
@arickxuan 使用 https://hub.docker.com/r/xream/sub-store 部署后 单条订阅/组合订阅/文件的右边操作里有个分享按钮
有个建议,仅供参考讨论 目前分享链接太长了
https://sub.example.com/share/file/testfile?token=xxxxxxxxx直接将token限制为全局唯一,不管是订阅分享还是文件分享保证唯一性 这样就可以省略
file/testfile部分 最终链接https://sub.example.com/xxxxxxxxx 👍️👍️👍️👍️ https://sub.example.com/share/xxxxxxxxx
非常棒的提议,在团队内部使用时通常需要一个方便记忆能快速打出来的url地址 完全可以兼容两种模式😀
之前定的是
https://sub.example.com/share/file/testfile?token=xxxxxxxxx这样能从 type 和 name 一眼看出是啥如果有短链接的需求 感觉可以自己反代处理下
我尝试反向代理无效,总是跳转到substore首页,重定向好像可以
@threerog 可能会加一套 https://sub.example.com/share/xxxxxxxxx
但是你的需求 我建议用反代或者自建短链实现
@threerog 自查.jpg
@threerog 我说的反代就是指在反代的配置里加重定向 例如实现 https://a.com/share/a 到 https://a.com/share/col/a?token=xxxxxxxxxxxx 什么叫 "反向代理无效" 现在流行的反代几乎都能实现这个需求
@xream
@threerog 我说的反代就是指在反代的配置里加重定向 例如实现 https://a.com/share/a 到 https://a.com/share/col/a?token=xxxxxxxxxxxx 什么叫 "反向代理无效" 现在流行的反代几乎都能实现这个需求
是我的描述和配置问题,sorry
https://a.com/share/sub/123?token=O1XNk-4BDNsFUTWGa72QB?target=ClashMeta
分享的链接 能不能指定类型呢 现在都是base64的 clash中 不能引用
@arickxuan 你的链接参数拼写错误?target=ClashMeta 应该修改为&target=ClashMeta
# 精确匹配 '/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 应该是因为你还是同一个浏览器访问的 所以 PWA 非 share/api/download 路由走前端了 如果你是用于其他代理 App 应该不受影响