我在 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,这个问题就解决了。我在谷歌计算引擎中运行我的虚拟机,可能防火墙终止了空闲连接。
Golang http 服务器自动选择了这一点,所以我的 golang 代码不需要更改。
问候,
沙迪亚
凤凰求蛊
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
}
}
- 2 回答
- 0 关注
- 349 浏览
添加回答
举报
0/150
提交
取消