mORMot2 Daily每日上游提交速读

HTTP 状态机趋于稳定,Unix 客户端关闭不再删除服务端 socket

本期集中于网络:完成大规模 HTTP 客户端与超时重构,并修复其间暴露的构造器、代理、WebSocket 和原生后端回归。HTTP 请求 framing 现在区分 HEAD 响应语义与请求体;Windows HTTP.sys 支持 chunked 上传及重复认证或 cookie header;POSIX 客户端关闭时也不再删除 Unix-domain 服务端 socket。

要点

  • POSIX Unix-domain clients no longer unlink the server socket path when they close.
  • HTTP.sys now accepts chunked request bodies and preserves repeated Set-Cookie and authentication headers.
  • HEAD and OPTIONS handling now follows message framing; redirected 301 POST and 303 requests also discard their old bodies.
  • THttpRequestExtendedOptions.GetTimeouts is replaced by ComputeTimeouts, THttpRequest.InternalConnect loses its parameters, and TCrtSocket.ReOpen no longer accepts a timeout.
  • TRestHttpClientGeneric connection-definition parsing no longer risks an infinite loop.
  • Land on final build 2.4.17433 rather than an intermediate build from this refactor sequence.

升级建议

请落到最终 build 2.4.17433,不要停在本期中间 build:后续提交修复了构造器调用、超时 setter、代理选择、REST 定义解析、重定向请求体和 HTTP 服务端状态。POSIX Unix socket 部署与 Windows HTTP.sys 服务端应优先升级。编译前请搜索 THttpRequestExtendedOptions.GetTimeouts、带参数的 THttpRequest.InternalConnect override 以及 TCrtSocket.ReOpen(timeout)。

版本号2.4.17398 → 2.4.17433
提交37
行数+693 -650
阅读3 分钟

36 条中的 36 条 · 上游 37 次提交

主题
# 条目 类别 单元
1 严重 HTTP 选项复用不再越界读取认证 record THttpClientSocket.SameOpenOptions 向 THttpRequestExtendedOptions.SameAuth 传入 @aOptions,而非 @aOptions.Auth,使其获得预期的基址并消除错误内存访问。 修复 mormot.net.client b466ee53+3-3

net: fixed wrong memory access in THttpClientSocket.SameOpenOptions

影响

Delphi/FPC HTTP 客户端复用检查不再读取无关内存,可避免认证比较错误与潜在 access violation。

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

2 高 Socket 超时存储简化,ReOpen 移除参数 TCrtSocket 用具体的连接、发送与接收值取代 fallback 字段,跟踪已应用的 SO_*TIMEO,通过 SetTimeoutsFrom 复制设置,并把 ReOpen(aTimeout) 改为使用已存储值的无参 ReOpen。 破坏性变更 mormot.net.sock 7f8a625b+114-155

net: rewritten TCrtSocket timeouts implementation

影响

向 ReOpen 传超时参数的代码将无法编译。Delphi/FPC 应在调用 ReOpen 前设置 ConnectTimeout、SendTimeout 与 ReceiveTimeout;写入 TimeOut 现在会同时设置三者。

需要迁移

将 ReOpen(timeout) 改为先赋值超时属性再调用 ReOpen,并重新测试 accepted socket 与代理/TLS 重连。

公开 API

  • TCrtSocket.ReOpensignature-changed — 超时参数被移除,改用已存储的阶段超时。
  • TCrtSocket.SetTimeoutsFromadded
  • TCrtSocket.TimeOutbehaviour-changed — 写入该属性现在会设置全部三个阶段超时。

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

3 高 扩展 HTTP 选项现在会计算具体超时值 THttpRequestExtendedOptions.GetTimeouts 被移除,ComputeTimeouts 会把缺失的阶段值写成 HTTP 默认值或 CreateTimeoutMS。THttpClientSocket 将其复制到 TCrtSocket,连接复用也不再比较超时配置。 破坏性变更 mormot.net.client 3d81851d+42-45

net: fixed THttpClientSocket timeouts usage

影响

直接调用 GetTimeouts 的 Delphi/FPC 代码将无法编译,必须改用会修改 record 的 ComputeTimeouts。仅变更超时值不再强制 HTTP socket 重连。

需要迁移

把 GetTimeouts 调用替换为 ComputeTimeouts,然后从 record 读取 ConnectTimeoutMS、SendTimeoutMS 与 ReceiveTimeoutMS。

公开 API

  • THttpRequestExtendedOptions.GetTimeoutsremoved
  • THttpRequestExtendedOptions.ComputeTimeoutsadded

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

4 高 HTTP 后端 override 现在从实例读取连接选项 THttpRequest.InternalConnect 移除三个超时参数;WinHTTP、WinINet、Curl 与 Delphi NetHTTP override 改从 fExtendedOptions 读取。构造过程先初始化 URI 字段与选项,再调用无参虚方法。 破坏性变更 mormot.net.client edbd697a+39-43

net: rewritten THttpRequest.InternalConnect method

影响

自定义 THttpRequest 后代若 override InternalConnect,将在 Delphi/FPC 下编译失败,需更新 override 签名与超时读取方式。

需要迁移

将 override 改为 procedure InternalConnect;,并读取 fExtendedOptions.ConnectTimeoutMS、SendTimeoutMS 与 ReceiveTimeoutMS。

公开 API

  • THttpRequest.InternalConnectsignature-changed

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

5 高 重定向与 100-Continue 现在正确处理请求体 当 301 POST 或适用的 303 转成 GET 时,THttpClientSocket 会清除 Data、DataMimeType 与 InStream;有输入 stream 时会生成 header;服务端仅在 Content-Length 或 chunked framing 声明 body 时发送 100 Continue。 修复 mormot.net.async+2 bdb952f3+27-23

net: some client/server HTTP state machine fixes

影响

Delphi/FPC 重定向请求不再把旧实体数据随重写后的 GET 发送;服务端也不会在没有 body framing 时要求客户端传 body。

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

6 高 REST 连接定义解析不再无限循环 TRestHttpClientGeneric.RegisteredClassCreateFrom 用 UrlDecodeNextNameValue 取代多段 UrlDecode 调用;每个 name/value 对都会推进一次,再处理已识别选项。 修复 mormot.crypt.secure+1 9292c506+27-20

rest: fixed TRestHttpClientGeneric.RegisteredClassCreateFrom

影响

由 TSynConnectionDefinition 创建的 Delphi 与 FPC 客户端,不会再因 DatabaseName 中某些旧逻辑无法推进的选项而挂起。

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

7 高 OPTIONS 可携带内容,只有 HEAD 不返回响应体 HTTP 客户端与服务端代码用显式 IsHead 判断响应体,并用 message framing 判断请求体。Curl 不再为 OPTIONS 启用 CURLOPT_NOBODY。 修复 mormot.net.acme+3 f119fd8c+18-19

net: only HEAD has no body - OPTIONS could

影响

Delphi/FPC 服务端现在会读取有 framing 的 OPTIONS 请求体,客户端也可接收 OPTIONS 响应内容。此前假定 OPTIONS 无 body 的应用可能看到新数据。

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

8 高 Curl 请求选项正确重置并恢复 TLS 验证 TCurlHttp 始终根据 RedirectMax 设置 coFollowLocation;未忽略证书错误时显式恢复 coSSLVerifyPeer 与 coSSLVerifyHost,再应用客户端证书或自定义 CA 文件。 修复 mormot.net.client cf40c09d+19-15

net: several fixes to TCurlHttp options usage

影响

复用的 Curl handle 不再残留上一请求的重定向或宽松 TLS 状态。POSIX Delphi/FPC Curl 客户端会恢复配置的证书验证。

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

9 高 批量超时更新现在会调用子类 setter TCrtSocket.SetTimeouts 恢复为公开 helper:设置 ConnectTimeout,并调用虚方法 SetSendTimeout 与 SetReceiveTimeout。SetTimeoutsFrom 和 DoCreate 也走此路径,确保 WebSocket override 执行。 修复 mormot.net.client+1 93002192+18-16

net: fixed TCrtSocket virtual timeout setters call

影响

通过基类 helper 分配超时时,THttpClientWebSockets 现在会同步 CallbackAnswerTimeOutMS。Delphi/FPC 子类的 setter hook 重新生效。

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

10 高 HTTP 服务端会读取任何有 framing 的请求体,包括 HEAD 同步与异步服务端路径现在根据 Content-Length 或 Transfer-Encoding 状态触发 body streaming 与 DownloadBody,不再排除 HEAD。异步 100-Continue 处理仅限等待请求体的状态。 修复 mormot.net.async+1 0e0af8c7+14-19

net: fixed body retrieval on HTTP servers logic

影响

有 framing 的请求字节会被一致消费,即使方法为 HEAD,也可避免 keep-alive 连接协议错位。Delphi 与 FPC 服务端后端均受益。

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

11 高 关闭 Unix-domain 客户端不再删除服务端 socket TCrtSocket.Close 现在仅在 nlUnix 且设置 fWasBind 时调用 fpunlink。回归测试连接到已 bind 的路径,并验证只有释放服务端才会删除文件。 修复 mormot.net.sock+1 5b58dd54+19-2

net: TCrtSocket.Close only deletes a unix socket file it bound itself

影响

在 POSIX Delphi 与 FPC 上,客户端断开不会再因删除 filesystem entry 而使仍运行的 Unix-domain 服务端无法接受新连接。

公开 API

  • TCrtSocket.Closebehaviour-changed

Antoine Gaudreau Simard · 18:32 UTC · 在 GitHub 上查看该提交 →

12 高 WinINet 将超时应用到 session handle TWinINet.InternalConnect 改在 fSession 上调用 InternetSetOption,而不是尚未创建的 fConnection;连接、发送或接收超时配置失败时会抛出明确错误。 修复 mormot.net.client 94043c0a+11-8

net: fixed TWinINet.InternalConnect timeouts setting

影响

Windows WinINet 客户端现在会真正获得配置的阶段超时,而不是用 nil handle 静默调用 API。配置失败对 Delphi 调用者可见。

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

13 高 HTTP 构造现在会在字段就绪后调用后端 THttpRequest.DoInternalConnect 在选择默认端口前设置 fHttps,并在计算选项后恢复遗漏的 InternalConnect 调用。 修复 mormot.net.client 9482ca12+4-3

net: fixed previous THttpRequest commit

影响

HTTPS 恢复默认端口 443,原生 HTTP 后端也会真正打开 session。本提交修复了上一构造器重构在 Delphi/FPC 中的问题。

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

14 高 HTTP.sys 服务端现可接收 chunked 请求体 THttpApiServer.DoExecute 现在区分已知 Content-Length 与 transfer-encoded 输入;chunked 数据通过可复用 128 KB buffer 循环读取,同时执行 MaximumAllowedContentLength 并记录实际接收字节数。 新功能 mormot.lib.winhttp+1 7baf2887+77-54

net: let http.sys server support chunked input body

影响

Windows HTTP.sys 后端可接受 HTTP/1.1 chunked 上传,不再拒绝或截断。未知长度且超限的 body 返回 413,接收错误返回 406。

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

15 高 各 HTTP 后端构造器统一初始化路径 THttpRequest 新增 DoInternalConnect,在调用后端虚方法前初始化 URI 字段、user agent 与具体超时;Curl 用发送/接收中较大值作为全局传输超时,Delphi NetHTTP 读取统一代理选项。 内部重构 mormot.net.client 70951dd7+28-29

net: several fixes to THttpRequest.Create

影响

所有原生后端统一走一条配置路径,但这个中间重构需要下一提交恢复后端调用并修正 HTTPS 端口选择。

值得一看

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

16 中 Socket 接收对每次尝试应用超时 TCrtSocket.TrySockRecv 为每次 Recv 调用计算 deadline,在 SockInPending 期间强制零等待,并在 select/poll 前钳制剩余值。 修复 mormot.net.sock 0f8d2fcd+15-13

net: rewritten TCrtSocket.TrySockRecv timeout logic

影响

Delphi/FPC 接收等待按底层尝试遵循 ReceiveTimeout,pending buffer 探测仍保持非阻塞。

值得一看

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

17 中 HTTP 重定向仅在规定情形转为 GET,其余保留方法 TAcmeLetsEncryptServer 对 GET/HEAD 使用 301,其余使用 308。THttpClientSocket 仅把 301 的 POST 与 303 的非 HEAD 方法转为 GET;构造请求时也不再丢弃显式提供的 HEAD body。 修复 mormot.net.acme+2 8a6da8b7+14-12

net: other HTTP HEAD support related fixes

影响

Delphi/FPC 客户端在 301 中保留 PUT、DELETE 等方法,并按 303 规则处理;ACME 的 HTTP-to-HTTPS 重定向用 308 保留非 GET 方法。

值得一看

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

18 中 Socket 发送使用每次尝试的单调时钟 deadline TCrtSocket.TrySndLow 为每次 Send 尝试用 GetTickCount64 计算 deadline,并将剩余 fSendTimeout 传给 WaitFor,不再使用旧全局 TimeOut。 修复 mormot.net.sock b05f8522+12-8

net: rewritten TCrtSocket.TrySndLow timeout/wait logic

影响

Delphi/FPC 的阻塞发送会更精确遵守发送阶段超时,不会在 Send 已耗时后重新等待完整时长。

值得一看

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

19 中 Pending buffer 读取取消等待但不修改 socket 超时 TCrtSocket 在 InputSock 周围新增内部 fSockInPending 标志;SockInRead 与 TrySockRecv 用它跳过重试等待,同时保持 SO_RCVTIMEO 与 fReceiveTimeout 不变。 修复 mormot.net.sock 057aff56+7-9

net: fixed TCrtSocket.SockInPending from InputSock()

影响

SockInPending 保持非阻塞,同时不再临时破坏逻辑接收超时,提高 Delphi/FPC buffered socket 的一致性。

值得一看

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

20 中 WebSocket 初始化移至共享 socket hook THttpClientWebSockets 用 DoCreate 取代构造器 override,调用 inherited DoCreate、初始化设置,并从 fReceiveTimeout 得到 CallbackAnswerTimeOutMS。 修复 mormot.net.ws.client 7ceaa39c+6-8

net: fixed THttpClientWebSockets constructor

影响

Delphi/FPC 的每个继承构造器现在都通过虚 hook 恰好初始化一次 WebSocket 设置,避免遗漏或重复初始化。

值得一看

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

21 中 Curl 可显式禁用继承的代理设置 当 THttpRequestExtendedOptions.Proxy 为 'none' 时,TCurlHttp 向 CURLOPT_PROXY 传入非 nil 空字符串;空选项仍允许 Curl 环境默认值,实际值则选择指定代理。 修复 mormot.net.client 68b62f05+8-5

net: fixed TCurlHttp proper 'none' proxy support

影响

POSIX Curl 请求可可靠绕过 HTTP_PROXY 等环境设置。Delphi/FPC 调用者继续使用文档中的 'none' 值。

值得一看

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

22 中 WinINet 使用 Unicode user-agent 与代理值 TWinINet.InternalConnect 将 user agent、代理和绕过列表从 RawUtf8 转为 SynUnicode,并用 InternetOpenW 取代 InternetOpenA。 修复 mormot.net.client 3851e090+8-5

net: fixed TWinINet Unicode options support

影响

Windows Delphi 客户端会保留非 ASCII user-agent 与代理配置,不再经过当前 ANSI code page。FPC 非 Windows 路径不受影响。

值得一看

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

23 中 Windows Basic Kerberos 认证使用完整服务端上下文 TBasicAuthServerKerberos 将单次 onlypass 凭据捷径限制为 POSIX GSSAPI;Windows 改走 SSPI 与可选组 SID 检查所需的 ServerSspiAuth context 路径。 修复 mormot.net.ldap+1 8fc28980+7-6

net: fixed TBasicAuthServerKerberos on Windows

影响

Windows Delphi 服务端在 Basic Kerberos 密码验证时不再走仅适用于 GSSAPI 的捷径。POSIX FPC 行为保持不变。

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

24 中 系统代理选择现在检查目标主机 GetSystemProxyUri 在判断空目标、loopback 或纯 IPv4 目标不走代理时,改用 TUri.Server 而非 Address。 修复 mormot.net.client+1 d8e97dc6+5-6

net: fixed GetSystemProxyUri()

影响

HTTP 客户端不再根据 URL path 做代理决策。Delphi/FPC 上 localhost 与配置为直连的 IPv4 流量应按预期绕过代理。

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

25 中 ACME GET 重定向改用 301 而非 308 TAcmeLetsEncryptServer.Redirect 将 GET 与 HEAD 一同放入 301 Moved Permanently 分支,其他方法继续使用保留方法的 308。 修复 mormot.net.acme 9cd6ccba+5-4

net: fixed GET redirection on TAcmeLetsEncryptServer

影响

浏览器与 ACME 的标准 GET 流量会收到常规永久重定向。现有 Delphi/FPC 应用代码无需修改。

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

26 中 HTTP.sys 保留多个独立认证 challenge HTTP_RESPONSE.AddCustomHeader 现在像处理 Set-Cookie 与 Connection 一样处理 WWW-Authenticate 和 Proxy-Authenticate:每次出现都作为 unknown header 输出,不再合并到单个 known-header slot。 修复 mormot.lib.winhttp 37898a45+6-3

net: http.sys respWwwAuthenticate + respProxyAuthenticate multiple headers

影响

Windows HTTP.sys 响应可同时声明多种认证 scheme,不再静默丢失后续值。Delphi/FPC 调用代码无需修改。

值得一看

Arnaud Bouchez · 15:18 UTC · 在 GitHub 上查看该提交 →

27 中 HTTP.sys 保留每个 Set-Cookie header HTTP_RESPONSE.AddCustomHeader 将 respSetCookie 放入 unknown-header 数组,使多个 Set-Cookie 行得以保留,不再在单一 known-header 字段中互相覆盖。 修复 mormot.lib.winhttp ed828cab+5-4

net: fixed several respSetCookie / Set-Cookie: values in http.sys

影响

Windows HTTP.sys 应用在单个响应中设置多个 cookie 时,现在会全部发送。其他 Delphi/FPC HTTP 服务端后端不受影响。

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

28 中 WebSocket callback 等待跟随有效接收超时 THttpClientWebSockets 通过 DoCreate 初始化;SetReceiveTimeout 在 inherited setter 后,从已存储的 fReceiveTimeout 设置 CallbackAnswerTimeOutMS。 修复 mormot.net.ws.client 881d1c4e+4-4

net: fixed THttpClientWebSockets with new timeouts

影响

Delphi/FPC 客户端的 WebSocket callback 等待现在与归一化后的有效接收超时一致。

值得一看

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

29 中 代理绕过列表可在选项序列化后保留 THttpRequestExtendedOptions.Save 以键 pb 保存 ProxyByPass,Load 会与现有代理、认证、TLS 和超时字段一同恢复。 修复 mormot.net.client ac6bc5d6+5-2

net: fixed THttpRequestExtendedOptions.ProxyByPass serialization

影响

持久化 HTTP 连接选项的 Delphi/FPC 代码,重新加载后不再丢失代理绕过列表。缺少新键的旧数据仍可读取。

值得一看

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

30 中 扩展 HTTP 选项新增代理绕过列表 THttpRequestExtendedOptions 新增公开 ProxyByPass,THttpRequest 移除重复存储;WinHTTP、WinINet 与 Curl 的代理读取统一通过 options record。 新功能 mormot.net.client 2febb8e3+19-19

net: introducing THttpRequestExtendedOptions.ProxyBypass field

影响

使用扩展 options 构造器的 Delphi/FPC 调用者现在可直接提供原生代理绕过列表。现有构造参数仍保留。

值得一看

公开 API

  • THttpRequestExtendedOptions.ProxyByPassadded

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

31 中 HTTP.sys chunked 上传按几何方式扩展 buffer chunked body 路径会直接保存首块,后续块复制前用 NextGrow 扩展 InContent,不再每次接收都 append 并重分配字符串。 性能 mormot.net.server c8d7648a+11-5

net: optimized memory allocation for http.sys #637 chunked input body

影响

Windows HTTP.sys 上大型或碎片化 chunked 上传会减少内存分配与复制。Delphi/FPC 应用接口不变。

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

32 中 含义模糊的无 body 方法 helper 已弃用 HttpMethodWithNoBody 被标记为 deprecated;文档要求响应体判断使用 IsHead,请求体存在与否则依据 message framing。 弃用 mormot.net.http a65a05fa+6-8

net: marked HttpMethodWithNoBody() as deprecated

影响

Delphi/FPC 调用者会收到弃用警告。继续使用该 helper 可能保留 OPTIONS 无 body 的错误假设。

值得一看

公开 API

  • HttpMethodWithNoBodydeprecated

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

33 中 REST HTTP 客户端采用统一超时 record TRestHttpClientGeneric 将连接、发送与接收值写入 fExtendedOptions,并在构造器和定义加载中调用 ComputeTimeouts;代理字符串保持 RawUtf8,不再经过 ANSI 转换。 内部重构 mormot.rest.http.client f54c3e10+17-37

rest: rewritten TRestHttpClient with latest changes

影响

REST HTTP 客户端与原生客户端共享相同超时默认值,并保留非 ASCII 代理文本。Delphi/FPC 公开构造语法不变。

值得一看

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

34 中 REST HTTP 客户端仅在扩展选项中保存代理数据 TRestHttpClientRequest 移除重复的 fProxyName 与 fProxyByPass 字段,从 fExtendedOptions 序列化值,并通过 TUri 加 options 的重载构造 THttpRequest。 内部重构 mormot.rest.http.client bdfe38d5+16-14

rest: removed TRestHttpClientRequest fProxyName/fProxyPass fields

影响

Delphi/FPC REST 客户端的代理设置现在只有一个数据源。现有公开构造器与连接定义接口保持不变。

值得一看

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

35 低 异步连接遵循配置的 loopback 地址策略 TAsyncConnection.Create 与 Recycle 将 RemoteIPLocalHostAsVoidInServers 传给 TNetAddr.IP,不再总把 loopback 转为空 RemoteIP。 修复 mormot.net.async+1 16543664+7-7

net: TAsynConnection follow RemoteIPLocalHostAsVoidInServers

影响

全局策略为 false 时,Delphi/FPC 异步服务端现在可报告 127.0.0.1,与同步服务端一致。无需代码迁移。

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

36 低 方法测试现在覆盖 HTTP 代码实际使用的 predicate test.core.base 移除 HttpMethodWithNoBody 断言,并为 IsGet、IsPost、IsPut、IsDelete、IsHead 与 IsOptions 增加明确的正反例。 测试 test.core.base a166d116+31-15

tests: remove HttpMethodWithNoBody() but use really used methods

影响

这只是方法语义变更的测试覆盖,本提交本身不改变 Delphi/FPC 应用代码。

Arnaud Bouchez · 15:12 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