You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Feature] 为 S3 direct-link 302 与 Web Proxy 增加显式兼容性契约 #2796
Activity
xrgzs commentedon Jul 16, 2026
请严格按照issue模版填写信息
huoxingdawang commentedon Jul 19, 2026
确实有这个问题
如果配置中不设置
web_proxy=true,restic在使用s3后端的时候会一直报告 302 error[-][Enhancement] 明确并配置 S3 direct-link 302 与 Web Proxy 的兼容性行为[/-][+][Feature] 为 S3 direct-link 302 与 Web Proxy 增加显式兼容性契约[/+]nostalume commentedon Jul 23, 2026
@xrgzs 已依照规范修改
xrgzs commentedon Jul 23, 2026
目前审查发现S3 Server下载部分的文档和最新的实现对不上,需要更新文档。
nostalume commentedon Aug 26, 2026
目前 proxy 设置下使用rustic/restic备份时会将其 range-read 转发到 Aliyun Drive callback 下载。并发读取 pack 时,Aliyun Drive 返回:
RequestDeniedByCallback / ExceedMaxConcurrency
OpenList 最终向 S3 client 返回 HTTP 500。将 rustic 的连接数限制为 1 可以绕过问题,但这把后端限流责任交给了每一个客户端,并迫使 repository workload 串行。
建议将 “S3 响应语义” 与 “后端传输策略” 分离:
S3 endpoint 默认使用 proxy 模式,直接返回对象流并保持 Range / Content-Range 等 S3 GetObject 语义
为每个 storage 增加独立的代理下载并发上限,例如 s3_proxy_max_concurrency,而不是依赖全局 max_concurrency 或客户端自行限流。
proxy 模式下,将客户端 Range 请求透传给后端 RangeReader,并流式转发响应,不缓存完整对象;用按 storage 的 semaphore/队列限制同时进行的 callback download。
队列饱和或 provider 明确限流时,返回可重试的 S3 错误(例如 SlowDown / 503,并可附 Retry-After),不要统一包装成无法诊断的 HTTP 500。
浏览器/普通下载可选择 direct 以获得直链吞吐;S3 repository client 选择 proxy 以获得稳定的协议语义。两者不应由 web_proxy 这个通用开关隐式混合。
nostalume commentedon Sep 18, 2026
进度更新(2026-09-18):S3 下载传输模式的文档更正已由 OpenListTeam/OpenList-Docs#368 合并;本 Issue 正文也已更正为“满足直链条件时可能返回 302”,并移除了误写的自引用。
独立的
s3_direct_redirect开关、默认策略和 UI 提示仍是待讨论的提议,尚未实现,因此本 Issue 保持开放。此前评论涉及的阿里云盘 callback 并发与 S3SlowDown已由 #2969 和审核中的 #3071 单独跟踪;#3071 使用按阿里云盘用户共享的上限,并未实现这里曾提议的每 storage 限制或Retry-After。