Golang学习-Http客户端及其超时机制

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

golang HTTP请求中的超时

我们首先来看一下HTTP请求过程中,可能产生的不同的超时类型:

  1. TCP连接超时
  2. HTTP请求头超时
  3. HTTP Body读超时
  4. HTTP Body写超时
  5. 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。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值