已开启
[Bug]: http1.1 客户端并发访问 HttpBufferedBody 及异常处理不完整 #330
Cangjie-panmengting创建于  7月23日
Cangjie-panmengting
Cangjie-panmengting仓颉Developer
7月23日 创建

感谢对仓颉社区的支持与关注,欢迎反馈缺陷。

发生了什么问题? | Describe the issue that occurred.

  1. HTTP 1.1 客户端 ConnNode.sendRequestTimeout 中,读取响应逻辑与发送 body 协程未正确同步。当请求失败触发重试时,重试使用的同一个 request 对象可能被并发访问 HttpBufferedBody,导致数据竞争。

  2. 发送 body 协程的异常仅捕获 SocketException,其他异常类型(如 HttpException)未被捕获,可能导致未处理异常传播。

  3. writeTimer 在正常路径中被取消,但在异常路径中未被取消,可能导致定时器泄漏。

期望行为是什么? | What is the expected behavior?

  1. 读取响应逻辑应包裹在 try-finally 中,finally 中确保 body 发送协程完成后再传播异常,防止并发访问。
  2. 捕获所有 Exception 类型而非仅 SocketException
  3. writeTimer 在 finally 中取消,确保异常路径也能清理。

如何复现该缺陷 | How to reproduce the bug

使用 HTTP 1.1 客户端发送带 body 的请求,模拟网络中断或服务端提前关闭连接的场景,触发重试机制,观察是否出现并发访问异常。

其他补充信息 | Additional information

涉及文件:src/stdx/net/http/http_client1_1.cj(ConnNode.sendRequestTimeout 方法)

cjc版本信息 | cjc version information

仓颉 SDK 1.3.0-alpha.01

stdx版本信息 | stdx version information

1.3.0-alpha.20260825091342

分支版本信息 | Branch version information

likedislike
Cangjie-panmengtingCangjie-panmengting仓颉Developer
7月23日 添加了label:bug
此处折叠了28条事件消息 查看更多
Xxiasong仓颉Developer
8 天前 关联了pull request:test: add inputstream body coverage matrix test for http1.1 client