为了账号安全,请及时绑定邮箱和手机立即绑定

Golang - TLS 握手错误

Golang - TLS 握手错误

Go
一只甜甜圈 2021-12-07 10:41:56
我在 go 中运行 https Web 服务器。我正在使用对 Web 服务器进行 ajax 调用的 angular Web 应用程序(Chrome 浏览器)对其进行测试。如果我不断地访问网络服务器,一切似乎都在工作。但是每当我让它闲置一段时间并点击 Web 服务器时,来自浏览器的 ajax 调用都没有得到响应。我几乎总是在我的服务器日志中看到这个日志行。2016/01/16 04:06:47.006977 http: TLS handshake error from 42.21.139.47:51463: EOF我可以确认IP地址是我的IP地址。我正在像这样启动我的 https 服务器:r := mux.NewRouter()r.HandleFunc("/status", handleStatus)setUpLoginEndpoint(&cfg.Session, r)setUpLogoutEndpoint(cfg.Session.CookieName, r)setUpChangePasswordEndpoint(cfg.Session.CookieName, r)setUpMetricSinkEndpoint(cfg.Metric.SinkApiKey, r)setUpMetricQueryEndpoint(cfg.Session.CookieName, r)http.ListenAndServeTLS(":443", "../cert.pem", "../keys.pem", &Server{r})我可以确认我正在使用 defer r.Body.Close() 关闭每个处理程序中的请求正文。我正在使用 go 1.5.2。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我启用了 tcp keepalive,这个问题就解决了。我在谷歌计算引擎中运行我的虚拟机,可能防火墙终止了空闲连接。

TCP 保持活动状态

在 linux 中配置 tcp 保持活动状态

Golang http 服务器自动选择了这一点,所以我的 golang 代码不需要更改。

问候,

沙迪亚


查看完整回答
反对 回复 2021-12-07
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

我收到与 OP 相同的错误,但就我而言,我指定的 TLSHandshakeTimeout 值太低。我不确定什么是合适的值,但将它从 100ms 移到 700ms 消除了我的错误。对于遇到相同错误并在其 http.Client 设置中指定非默认 http.Transport 配置值的其他人,您可能需要确保将 TLSHandshakeTimeout 设置为足够高的值。


&http.Client{

  Transport: &http.Transport{

    TLSHandshakeTimeout:   700 * time.Millisecond, //<-- I was receiving OP's error when I had this set to 100ms

  }

}


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 349 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信