golang的http库超时
1. Client 端
在作为客户端发送请求时,超时控制主要分两个层面:高层级的 http.Client 超时 和 低层级的 http.Transport 精细化控制。在大多数情况下,设置 http.Client.Timeout 就足够了,它可以有效地防止整个请求过程的无限期等待。

1.1 http.Client.Timeout
最简单,但有时太粗暴。这是最常用的设置,它控制包括连接、重定向(Redirects)以及读取响应体在内的整个请求生命周期的最大时长。
1 | c := &http.Client{ |
- 涵盖范围:Dial(拨号) -> TLS Handshake(握手) -> Request Headers/Body Send -> Response Headers Read -> Response Body Read。
- 优点:简单,能防止请求无限挂起。缺点:对于需要处理长流(Streaming)响应的请求(如下载大文件),这个超时如果不小心设置短了,连接会在中途被截断。
- 如果整个过程的累计时间超过
Timeout,请求会被强制取消,并返回net/http: request canceled (Client.Timeout exceeded)错误。