#3067·OpenList

[BUG] S3 服务器不兼容RFC 9110 HTTP Semantics(Preconditions)

Author: jyericCreated Sep 10, 2026Updated Sep 10, 2026
Labelsbug

请确认以下事项

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

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

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

  • 我已确认阅读了OpenList文档

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

  • 我已确认是OpenList的问题,而不是其他原因(例如 网络依赖操作)。

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

  • 我已确认这个问题在最新版本中没有被修复。

  • 我没有阅读这个清单,只是闭眼选中了所有的复选框,请关闭这个 Issue 。

OpenList 版本(必填)

v4.2.4

使用的存储驱动(必填)

local

问题描述(必填)

类似于 #3065 ,S3 服务器经测试也没有实现条件写入功能,却返回200。

以下报告由AI生成:

测试项 实际结果 判断
不存在的对象,携带 If-None-Match: * 创建 200,创建成功 符合预期
已存在的对象,携带 If-None-Match: * 再次写入 200,原内容被覆盖 不支持仅当不存在时写入
携带错误的 If-Match 写入 200,原内容被覆盖 未校验版本
携带当前 PUT 返回的 ETag 写入 200,更新成功 单独这一项不能证明支持条件写入
更新后,携带旧 PUT ETag 再次写入 200,新版本被旧版本请求覆盖 不支持乐观锁
对不存在的对象使用 If-Match 200,对象被创建 未执行匹配条件
PUT 响应中的 ETag 有非空值,内容变化后值变化 上传响应提供 ETag
GET / HEAD 响应中的 ETag 均为 ETag: "" 未提供可用于版本比较的有效值

S3 服务没有实现ETag,ETag实现在 RFC 9110 HTTP Semantics 并非必须实现的项目。但应该可以和webdav修复一起实现。 #3066

日志(必填)

[22:38:47] [WARN] [openlist] failed get /openlist-local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt: failed to get obj: object not found
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 404 |  531.7µs |       127.0.0.1 | HEAD     "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |    2.1ms |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |  507.9µs |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |    531µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |  525.8µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |    534µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |  529.7µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |  529.5µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |  535.2µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |  534.9µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 204 |  525.7µs |       127.0.0.1 | DELETE   "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [WARN] [openlist] failed get /openlist-local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt: failed to get obj: object not found
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 404 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |  538.8µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 200 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 204 |       0s |       127.0.0.1 | DELETE   "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:38:47] [WARN] [openlist] failed get /openlist-local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt: failed to get obj: object not found
[22:38:47] [INFO] [openlist] [GIN] 2026/09/10 - 22:38:47 | 404 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-1a077c320c2c447483ddf51f415467f2.txt"
[22:39:21] [WARN] [openlist] failed get /openlist-local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt: failed to get obj: object not found
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 404 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |    554µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |  531.4µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |  532.9µs |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |  538.8µs |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |  530.3µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |   1.07ms |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:21] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:21 | 200 |  541.1µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |  540.8µs |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |  531.5µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |  525.4µs |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |  535.5µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |  538.3µs |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |       0s |       127.0.0.1 | GET      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 204 |       0s |       127.0.0.1 | DELETE   "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [WARN] [openlist] failed get /openlist-local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt: failed to get obj: object not found
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 404 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |   1.06ms |       127.0.0.1 | PUT      "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 200 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 204 |       0s |       127.0.0.1 | DELETE   "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"
[22:39:22] [WARN] [openlist] failed get /openlist-local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt: failed to get obj: object not found
[22:39:22] [INFO] [openlist] [GIN] 2026/09/10 - 22:39:22 | 404 |       0s |       127.0.0.1 | HEAD     "/local/s3-lock-probe-521e36b544224f20bb1d24b489a93c97.txt"

配置文件内容(必填)

Irrelevant

复现链接(可选)

No response

AI生成内容

  • 我使用了AI工具生成此内容
  • 我没有使用AI工具生成此内容

AI模型是

gpt-5.6-sol