前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go http.Transport 主要参数说明

Go http.Transport 主要参数说明

原创
作者头像
amc
修改2023-05-25 10:48:42
2.6K0
修改2023-05-25 10:48:42
举报
文章被收录于专栏:后台全栈之路

在 Go 中创建一个 http client 时,一般会使用 Go http 包的 Transport 类型。本文主要说明 http.Transport 需要关注的主要参数。


http.Transport 类型说明

首先我们要明确的是,我们开发 http client 的时候,经常会这么写:

代码语言:go
复制
client := &http.Client{
    Transport: http.DefaultTransport,
}

但细看可以发现,http.ClientTransport 成员类型是 http.RoundTripper,而不是 http.Transport 类型。换句话说,开发者完全可以抛弃原生的实现,自己定制一份 http.RoundTripper 接口来实现一个完整的 http 调用。不过这不在本文说明范围内。


http.Transport 主要参数

该类型通过一系列的参数来决定其行为。请注意的是,同样数据类型的不同参数,其表达的默认值是不同的。

参数

作用

默认值

连接控制类

Proxy

指定使用 http 代理。这里推荐传入 http.ProxyFromEnvironment, 以支持系统配置的 http 代理

nil,表示 不使用 任何代理,请注意

DialContext

TCP 连接函数。开发者可以简单封装一下,一般可以用来做一些监控或者特殊的地址解析逻辑

nil, 使用默认的 http 连接

超时控制类

TLSHandShakeTimeout

time.Duration 类型,表示TLS 握手超时时间。这里推荐传入一个非零值

0, 表示无限制

IdleConnTimeout

time.Duration 类型,表示一个连接在空闲多久之后关闭。

0, 表示不关闭

连接数控制类

MaxIdleConns

最大空闲连接数

0, 表示无限制

MaxIdleConnsPerHost

每一个 host 的最大连接数

http.DefaultMaxIdleConnsPerHost,即 2

缓冲区类

WriteBufferSize

写缓冲区的大小

4kB

ReadBufferSize

读缓冲区的大小

4kB

其他

ForceAttemptHTTP2

字面意思,是否强制尝试 HTTP2。建议设置为 true

false, 不尝试


DefaultTransport 配置

http.DefaultTransport 是基于 http.Transport 实现的,其配置说明如下:

参数

Proxy

http.ProxyFromEnvironment 即 follow 系统配置

DialContext

net.Dialer 类型的 DialContext 方法

TLSHandShakeTimeout

10 秒

IdleConnTimeout

90 秒

MaxIdleConns

100

MaxIdleConnsPerHost

http.DefaultMaxIdleConnsPerHost,即 2

WriteBufferSize

4kB

ReadBufferSize

4kB

ForceAttemptHTTP2

true


DialContext 简单示例

代码语言:go
复制
func dialContext(ctx context.Context, network, addr string) (net.Conn, error) {
	// 注: 这里无视了 ctx 的超时, 实际上应该加上
	log.Debugf("request connecting %v, %v", network, addr)

	tcpAddr, err := net.ResolveTCPAddr(network, addr)
	if err != nil {
		return nil, fmt.Errorf("resolve %s failed: %w", addr, err)
	}

	conn, err := net.DialTCP(network, nil, tcpAddr)
	if err != nil {
		return nil, fmt.Errorf("connect to %v failed: %w", tcpAddr, err)
	}
	
	return conn, nil
}

Reference


本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

原作者: amc,原文发布于云+社区,也是本人的博客。欢迎转载,但请注明出处。

原作者: amc,欢迎转载,但请注明出处。

原文标题:《Go http.Transport 主要参数说明》

发布日期:2023-05-25

原文链接:https://cloud.tencent.com/developer/article/2291318

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • http.Transport 类型说明
  • http.Transport 主要参数
  • DefaultTransport 配置
  • DialContext 简单示例
  • Reference
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档