mORMot2 Daily每日上游提交速读

URI redirect 稳定,heartbeat 与 session 计时恢复

URI 栈按 RFC 3986 重写并支持相对 Location 解析,随后在 HTTP client redirect 采用之前持续修正至 build 2.4.17187。生产用户还获得异步 WebSocket heartbeat 停止问题的后续修复、正确的 Signed URI 与 REST session timeout、更安全的 proxy-cache 启停,以及可选的 Windows IOCP 直接写入。外部 ESynSspi.RaiseLastOSError 调用需要迁移。

要点

  • 采用 upstream head 215c7bbd240419735ad7e89f5d35ddc9cfeb8b4d,即 build 2.4.17187,以获得完整 URI 与 redirect 修复序列。
  • Build 2.4.17171 恢复被上一版 idle-loop 比较禁用的异步 WebSocket heartbeat callback。
  • Signed URI timestamp 顺序与 REST session timeout 算法已修正,覆盖长期运行服务及 32-bit tick rollover。
  • Windows proxy cache 可使用 IOCP 直接写入,并避开启动与后台删除 race。
  • 将外部 ESynSspi.RaiseLastOSError 调用替换为 ESynSspi.RaiseSspiError。
  • Heartbeat 用户避开 2.4.17162–2.4.17170;URI 用户避开未完成的 2.4.17176–2.4.17186。

升级建议

升级到 head 215c7bbd240419735ad7e89f5d35ddc9cfeb8b4d 的 build 2.4.17187,不要停在 URI 重写中间版本。WebSocket、Signed URI、REST session、SOA discovery 与 proxy-cache 用户应优先升级。编译外部代码前将 ESynSspi.RaiseLastOSError 替换为 ESynSspi.RaiseSspiError,并回归测试相对 redirect、credential policy 与 Windows proxy 吞吐。

版本号2.4.17161 → 2.4.17187
提交26
行数+1154 -451
阅读2 分钟

26 条中的 26 条 · 上游 26 次提交

主题
# 条目 类别 单元
1 高 Signed URI session 正确处理 tick rollover TRestServerAuthenticationSignedUri.RetrieveSession 使用有符号模差比较 timestamp,仅在更新时记录,并统一启动与 32-bit rollover 处理。 安全 mormot.rest.server 1c193929+31-25

rest: fixed TRestServerAuthenticationSignedUri.RetrieveSession parsing

影响

长期运行的 Signed URI 服务不再在进程启动或 tick 回绕附近误拒绝或错序有效 authentication timestamp。

Arnaud Bouchez · 17:25 UTC · 在 GitHub 上查看该提交 →

2 高 HTTP redirect 通过 TUri 解析 Location THttpClientSocket 用 TUri.FromLocation 替代手工 3xx Location 字符串处理,允许 OnRedirect 修改 Location/options,并基于解析 URI 决定重连、credential 与拒绝。 修复 mormot.net.client 150674b6+69-66

net: fixed THttpClientSocket 3xx redirection Location: parsing

影响

相对、绝对及 scheme-relative redirect 获得一致处理,但此初始集成需要后续 cross-origin 修复后才能用于生产。

公开 API

  • THttpClientSocket redirect Location handlingbehaviour-changed — 改用符合 RFC 3986 的 TUri.FromLocation。

Arnaud Bouchez · 17:39 UTC · 在 GitHub 上查看该提交 →

3 高 初始 URI parser 缺陷已修正 TUri.From 与 FromLocation 修正直接字符串长度处理,拒绝空的显式 port,修复类型、边界检查及测试发现的相对解析输出。 修复 mormot.net.sock 50b2e69c+25-37

net: fixed TUri.From/FromLocation methods

影响

应用不应使用新 parser 的初始 build,因为畸形 port 与部分输入长度可能被错误处理。

Arnaud Bouchez · 17:24 UTC · 在 GitHub 上查看该提交 →

4 高 TUri.FromScheme 现保持文本与枚举 scheme 一致 TUri.FromScheme 除 UriScheme 外还会从 TUriScheme lookup 设置 Scheme,并加入 HTTP、HTTPS、WS、WSS、FTP、LDAPS 回归测试。 修复 mormot.net.sock 215c7bbd+14-11

net: fixed TUri.FromScheme

影响

FromScheme 后使用 URI、SameUri 或 Https 的调用方现获得正确 scheme;停在 2.4.17186 可能构造不一致的 TUri。

公开 API

  • TUri.FromSchemebehaviour-changed — 现同时初始化 UriScheme 与 Scheme。

Arnaud Bouchez · 19:07 UTC · 在 GitHub 上查看该提交 →

5 高 Redirect origin 检查与 retry 状态稳定 THttpClientSocket 在解析新 Location 后才计算 cross-origin,移除临时 RedirectCrossOrigin 字段,reopen 失败时恢复 HTTP 状态;FromScheme 记录 UriScheme。 修复 mormot.net.client+1 eb38a32d+10-7

net: one last set of fixes before the week-end

影响

Redirect credential policy 现基于实际目标判断,reconnect 失败不再留下半修改 client 状态。

Arnaud Bouchez · 17:50 UTC · 在 GitHub 上查看该提交 →

6 高 SOA discovery 正确遵守有效 publication timeout TServicesPublishedInterfacesList 修正 expired/live 反向比较,使有效 published interface 保持可见,并允许有期限条目刷新 checksum 状态。 修复 mormot.soa.core 712db4b8+9-8

soa: fixed TServicesPublishedInterfacesList timeout logic

影响

使用非零 publication timeout 的服务发现不再隐藏有效服务或跳过必要刷新。

Arnaud Bouchez · 13:43 UTC · 在 GitHub 上查看该提交 →

7 高 Proxy-cache 启动不再与 idle worker race THttpProxyServer 新增 fUrlSet readiness flag,使 OnIdle 在 URL 初始化完成前退出,修复启动时记录的随机 GPF。 修复 mormot.net.async 7060c16c+8-3

net: fixed random GPF at THttpProxyServer startup

影响

生产 proxy cache 避免可能在 Start 完成前使进程 crash 的初始化 race。

Arnaud Bouchez · 07:39 UTC · 在 GitHub 上查看该提交 →

8 高 Proxy-cache 删除在 shutdown 时安全中止 THttpProxyServer 在 Stop 或 remote-IP 变化时清除 fUrlSet,并在慢速目录删除期间检查它,避免后台工作继续访问失效状态。 修复 mormot.net.async 98ab0d20+6-3

net: hardened Proxy Cache background deletion even more

影响

Proxy-cache shutdown 与重新配置可避免后台访问过期 URL 状态,降低 crash/race 风险。

Arnaud Bouchez · 08:00 UTC · 在 GitHub 上查看该提交 →

9 高 异步 WebSocket heartbeat 恢复运行 TAsyncConnections.IdleEverySecond 改为将当前秒数与每个允许 callback 时间比较,不再错误比较 allowed 与 GC cutoff。 修复 mormot.net.async 505684ce+4-4

net: fixed regression in TWebSocketAsyncConnections heartbeats

影响

TWebSocketAsyncConnections heartbeat callback 不再于默认内存释放阈值后停止,恢复存活流量与 stale-peer 检测。

Arnaud Bouchez · 12:25 UTC · 在 GitHub 上查看该提交 →

10 高 TUri parsing 围绕有界 buffer 重写 TUri.From 重写并委托给新增 public FromBuffer,从有界 pointer 解析 scheme、user info、IPv6 authority、port、path、query 与 fragment。 内部重构 mormot.net.sock 4dd65061+152-92

net: rewritte TUri.From() method

影响

URI parsing 行为广泛变化并新增无分配入口;初始实现需配合后续修复。

公开 API

  • TUri.FromBufferadded — 解析有界 URI buffer,并支持可选默认 port。
  • TUri.Frombehaviour-changed — 现使用新的有界 RFC-oriented parser。

Arnaud Bouchez · 16:23 UTC · 在 GitHub 上查看该提交 →

11 中 SSPI exception 现报告实际 SSPI error ESynSspi.RaiseLastOSError 重命名为 RaiseSspiError,并从传入 SSPI status 构建消息,不再附加无关 GetLastError;内部 Check 改为 CheckOK。 破坏性变更 mormot.lib.sspi+1 60ef8977+31-32

lib: fixed SSPI exception message

影响

Windows authentication/TLS 诊断更准确;调用该 public exception helper 的外部代码在重命名前无法编译。

需要迁移

搜索 ESynSspi.RaiseLastOSError,并替换为 ESynSspi.RaiseSspiError。

公开 API

  • ESynSspi.RaiseLastOSErrorrenamed — 重命名为 RaiseSspiError,并报告传入 SSPI status。

Arnaud Bouchez · 07:30 UTC · 在 GitHub 上查看该提交 →

12 中 URI 校验遵循 RFC 3986 边界规则 TUri parsing 拒绝相对路径首 segment 中的冒号,收紧 authority、port 与 Location 校验,并扩充有效及畸形引用测试。 修复 mormot.net.sock 96f4f5cf+69-57

net: follow RFC 3986 for URI parsing

影响

畸形 redirect 目标不再被模糊解释;Delphi/FPC 仍支持有效 RFC 3986 相对引用。

公开 API

  • TUri.From and TUri.FromLocationbehaviour-changed — 更严格拒绝畸形 RFC 3986 引用。

Arnaud Bouchez · 17:38 UTC · 在 GitHub 上查看该提交 →

13 中 异步连接 GC 正确处理 tick rollover TAsyncConnections.OneGC 使用无符号 elapsed-time 相减并限制未来 last-operation 值,使 idle cleanup 可跨 32-bit tick 回绕。 修复 mormot.net.async b67f5df7+12-10

net: fixed TAsyncConnections GC timing logic

影响

长期运行的异步 Delphi/FPC server 不再在 timer rollover 附近错误延迟或触发连接 GC。

Arnaud Bouchez · 14:07 UTC · 在 GitHub 上查看该提交 →

14 中 HTTP proxy keep-alive 使用代理专用 header THttpClientSocket 对 proxy 流量发送 Proxy-Connection: Keep-Alive,直接请求与关闭语义仍使用 Connection 处理。 修复 mormot.net.client 6c5201e6+8-6

net: try to fix THttpClientSocket over SQUID Proxy

影响

通过 SQUID 类 proxy 的连接因明确使用目标 hop-by-hop header 而更少被关闭或误处理。

Arnaud Bouchez · 08:44 UTC · 在 GitHub 上查看该提交 →

15 中 每周 HTTP rotation 在正确时间触发 THttpRotater 修正 tick 比较,仅在当前 tick 达到 NextTix32 时执行每周 rotation,而非 deadline 尚未到达时。 修复 mormot.net.http 1fc47dc2+4-3

net: fixed regression in THttpRotater logic

影响

依赖每周 HTTP log/file rotation 的 backend 恢复预期调度,不再在错误时间轮换。

Arnaud Bouchez · 12:44 UTC · 在 GitHub 上查看该提交 →

16 中 TSynCache 仅在 deadline 后 reset TSynCache.ResetIfNeeded 现要求 fTimeoutTix 非零,并在当前 tick 到达或超过 deadline 时 reset,替代反向的未来 deadline 检查。 修复 mormot.core.search f975f6ac+4-3

core: fixed TSynCache.ResetIfNeeded logic

影响

Delphi/FPC cache 不再提前清空,并会在配置时间正确过期。

Arnaud Bouchez · 12:37 UTC · 在 GitHub 上查看该提交 →

17 中 REST session 过期不再丢失 timeout 精度 TAuthSession 先将 SessionTimeout 乘以 MilliSecsPerMin 再位移,不再提前截断每分钟因子。 修复 mormot.rest.server 75a6ffd2+3-3

rest: fixed TAuthSession timeout computation

影响

长期运行的 Delphi/FPC server 不再略微提前使 idle session 过期;60 分钟设置此前最多损失约 36 秒。

Arnaud Bouchez · 17:54 UTC · 在 GitHub 上查看该提交 →

18 中 TUri 可无分配解析 HTTP Location 新增 public TUri.FromLocation,可根据 server、port 与 TLS context 解析绝对、scheme-relative、root-relative 和 path-relative Location。 新功能 mormot.net.sock 1d79356f+264-2

net: new TUri.FromLocation() method

影响

Delphi/FPC HTTP 代码可用单个无分配 parser 替代临时字符串操作,但应同时采用后续修复。

值得一看

仅在最终 build 2.4.17187 采用,并测试服务使用的相对 Location。

公开 API

  • TUri.FromLocationadded — 新增 public RFC 3986-aware Location resolver。

Arnaud Bouchez · 16:25 UTC · 在 GitHub 上查看该提交 →

19 中 Redirect 可强制建立新 HTTP 连接 THttpRedirectOption 新增 hroForceReconnect,使 THttpClientSocket 对每次 redirect(含 same-origin)关闭并重开 socket。 新功能 mormot.net.client 49fa877c+10-6

net: new hroForceReconnect option for THttpClientSocket

影响

位于 SQUID/E2Guardian 后的 client 可避免陈旧或错误路由的复用连接;默认空 option set 保持现有行为。

值得一看

仅对受影响 proxy 路径启用 hroForceReconnect,并衡量连接成本。

公开 API

  • THttpRedirectOption.hroForceReconnectadded — 强制 redirect 时重建 socket。

Arnaud Bouchez · 10:06 UTC · 在 GitHub 上查看该提交 →

20 中 异步 socket 可直接处理 IOCP 写入 TAsyncConnectionsOptions 新增 acoIocpWriteDirect;Windows 写路径可先直接调用 TPollAsyncSockets.ProcessWrite,再回退到 queue。 性能 mormot.net.async 7966b5fb+29-14

net: new hsoIocpWriteDirect HTTP server option for IOCP

影响

选择启用的 Windows async server 可降低 dispatch overhead;Delphi/FPC POSIX 路径不变。

值得一看

仅通过 server option 启用,并在 Windows 上压测并发大响应。

公开 API

  • TAsyncConnectionsOptions.acoIocpWriteDirectadded — 请求 Windows IOCP 直接写入处理。
  • TPollAsyncSockets.ProcessWritesignature-changed — Windows 下新增带默认值的 direct-processing 参数。

Arnaud Bouchez · 11:49 UTC · 在 GitHub 上查看该提交 →

21 中 Windows proxy cache 启用 IOCP 直接写入 新增 public hsoIocpWriteDirect server option,映射到 acoIocpWriteDirect;THttpProxyServer 在 Windows IOCP 上默认启用以减少排队写入切换。 性能 mormot.net.async+1 217c0a6b+15-11

net: enhanced Proxy Cache scaling on Windows

影响

Windows proxy-cache 吞吐可减少 write-queue 竞争;非 Windows backend 及未启用该选项的 server 保持原路径。

值得一看

对比 benchmark Windows proxy-cache 吞吐与延迟。

公开 API

  • THttpServerOption.hsoIocpWriteDirectadded — 启用 IOCP 直接写入处理。

Arnaud Bouchez · 12:03 UTC · 在 GitHub 上查看该提交 →

22 低 测试适配 translation layer 与旧版 curl RSA key generation 在 Windows PRISM 下放宽 timeout,symbol discovery 跳过 SynLogVectoredHandler,TFTP 集成测试对存在重传问题的 curl 版本加 gate。 编译器与平台 mormot.core.log+2 6250c714+47-36

test: try to adapt to some LUTI conditions

影响

CI 与模拟 Windows 环境减少误报;应用行为仅在 PRISM 下允许更长 RSA timeout。

Arnaud Bouchez · 07:10 UTC · 在 GitHub 上查看该提交 →

23 低 URI 与 Location parsing 获得广泛回归覆盖 网络测试为 TUri.From 与 TUri.FromLocation 添加大量有效/无效案例,覆盖 authority、IPv6、port、query、fragment 与相对解析。 测试 a22a5e2e+268-3

test: cover TUri.From/FromLocation methods as much as possible

影响

应用代码无直接影响;这些测试约束 parser 重写并暴露后续 commit 修复的回归。

Arnaud Bouchez · 17:24 UTC · 在 GitHub 上查看该提交 →

24 低 TUri.From 重写后扩充测试覆盖 网络测试在 parser 重写后新增 credential、IPv6 literal、显式 port、path、query、fragment 与畸形输入案例。 测试 d4c88e2e+33-2

tests: enhanced TUri.From() coverage

影响

应用代码无影响;扩充测试支撑后续 parser 修正。

Arnaud Bouchez · 16:25 UTC · 在 GitHub 上查看该提交 →

25 低 FromScheme 获得针对性协议测试 网络协议测试在最终实现修复前覆盖 TUri.FromScheme 的 HTTP、HTTPS、WS、WSS、FTP、FTPS、LDAP 与 LDAPS。 测试 5ffe448e+24-2

tests: validate TUri.FromScheme method

影响

应用代码无影响;新增检查暴露了下一 commit 修复的 scheme-state 缺陷。

Arnaud Bouchez · 17:51 UTC · 在 GitHub 上查看该提交 →

26 低 TFTP retry 预期得到细化 TFTP server 测试调整 retry 与 connection-count 预期,以匹配集成测试观察到的额外请求重传。 测试 4ba0e6f5+5-5

tests: refined TFTP server expectations

影响

应用代码无变化;仅测试预期在重传情况下更稳健。

Arnaud Bouchez · 06:40 UTC · 在 GitHub 上查看该提交 →

上游活动 每日提交数 · 最近 60 天
提交977
活跃天数44/60
最忙一天2026-09-30
峰值60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13