GOlang/https:等待客户端前言超时

Posted

技术标签:

【中文标题】GOlang/https:等待客户端前言超时【英文标题】:GOlang/https: timeout waiting for client preface 【发布时间】:2016-10-10 13:43:12 【问题描述】:

我使用ListenAndServeTLS切换了SSL

    func main() 
        serverMux := http.NewServeMux()
        serverMux.HandleFunc("/v1/ws1", handler1)

        serverMux.HandleFunc("/v1/ws2", handler2)
        serverMux.HandleFunc("/v1/ws3", handler3)

        serverMux.HandleFunc("/static/", handlerStatic(http.FileServer(http.Dir("/var/project/"))))
        go func() 
            wsSSLServer := &http.Server
                Addr:         ":443",
                Handler:      serverMux,
                ReadTimeout:  15 * time.Second,
                WriteTimeout: 15 * time.Second,
            
            certPath := "/etc/letsencrypt/live/example.com/"
            fmt.Println(wsSSLServer.ListenAndServeTLS(certPath+"fullchain.pem", certPath+"privkey.pem"))
        ()
        wsServer := &http.Server
            Addr:         ":80",
            Handler:      serverMux,
            ReadTimeout:  15 * time.Second,
            WriteTimeout: 15 * time.Second,
        
        fmt.Println(wsServer.ListenAndServe())
    

现在我在日志中发现了很多这样的错误:

http2:服务器:从客户端 x.x.x.x:xxxxx 读取前言时出错: 等待客户端前言超时

这是什么意思?

【问题讨论】:

你的客户端真的发送了 https 请求吗? 是的,目前同时服务于 http 和 https 抱歉 Daniele,我的问题是您的 客户端 是否发送了有效的 http2 请求?服务器等待 10 秒让客户端发送序言然后放弃。 客户端通常是一个移动浏览器,比如安卓版 Chrome,它只是访问 https:// URL 通过 https:// 我实际上是在提供一个由 Go 生成的 html 页面。知道发生了什么吗? 【参考方案1】:

我在使用 Firefox 作为客户端时遇到了同样的错误。 重新生成 SSL 密钥/证书解决了问题,我猜证书已过期。

对于本地主机开发: openssl req -nodes -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX -subj '/CN=localhost'

【讨论】:

以上是关于GOlang/https:等待客户端前言超时的主要内容,如果未能解决你的问题,请参考以下文章

命名管道服务器,如何中断或超时等待客户端连接和传入数据

Xdebug: [Step Debug] 连接调试客户端超时,等待:200 ms。试过:本地主机:9003

C3PO:客户端在等待获取资源时超时

在 PHP 中,我将如何立即中止 HTTP 连接,不再发送数据包。客户端应继续等待,直到浏览器内部超时

3分钟理解mysql所有timeout的值

QSslSocket 等待数据时超时(但 QTcpSocket 不会)