golang HTTP请求中的超时
我们首先来看一下HTTP请求过程中,可能产生的不同的超时类型:
- TCP连接超时
- HTTP请求头超时
- HTTP Body读超时
- HTTP Body写超时
- Keepalive超时
目前的HTTP库大多数都是支持HTTP/1.1(HTTP/2由于存在连接并发复用,需要考虑的维度就不同了),在此情况下,HTTP库将用户的请求分为了两个层面,一个是连接层面,一个是请求层面;对于采用keep-alive机制的客户端,当请求结束之后,不一定断开连接,HTTP库会维护与服务端的连接;有同一个服务端的请求发起时,可以再次使用之前的连接。
HTTP库基本超时设置
HTTP在创建client时可以再client结构中设置一个超时时间:
client := &http.Client{
CheckRedirect: redirectPolicyFunc,
Timeout: time.Second * 5
}
resp, err := client.Get("https://www.google.com/")
如果只设置这个client.Timeout,用不久就会发现这个超时时间管的太宽了。其覆盖了请求的全部过程,从连接建立一直到获得请求结果。入上例所示,如果client.Get没有在5秒钟内返回结果,就会返回request timeout的err。</

本文介绍了Golang中HTTP客户端的超时机制,包括TCP连接超时、HTTP请求头超时、HTTP Body读取超时等,并展示了如何设置HTTP库的基本超时和Transport超时,以及如何通过context来控制HTTP Body读取超时。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



