Golang中http.ListenAndServeTLS的默认参数是什么

Golang中http.ListenAndServeTLS的默认参数是什么 使用以下代码时:

log.Fatal(http.ListenAndServeTLS(
	":80",
	pathToCerFile,
	pathToKeyFile,
	http.HandlerFunc(someRouter),
))

例如,ReadTimeoutWriteTimeoutMaxHeaderBytes 这些选项的值会是多少?

如果我想为这些选项设置自定义值,是否必须使用 &http.Server{} 结构体?

2 回复

以下是 http.ListenAndServeTLS 的实现:

func ListenAndServeTLS(addr, certFile, keyFile string, handler Handler) error {
	server := &Server{Addr: addr, Handler: handler}
	return server.ListenAndServeTLS(certFile, keyFile)
}

因此,它创建了一个非常基础的 http.Server 并使用它。Server 文档指出,默认情况下没有任何超时设置。所以你必须自己构建一个服务器并调用它的 ListenAndServeTLS 方法。

更多关于Golang中http.ListenAndServeTLS的默认参数是什么的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go中,http.ListenAndServeTLS 使用的默认参数与 http.ListenAndServe 相同,都是通过 http.Server 的零值配置。具体默认值如下:

  1. ReadTimeout: 0(无超时限制)
  2. WriteTimeout: 0(无超时限制)
  3. MaxHeaderBytes: 1 << 20(1MB)
  4. IdleTimeout: 0(Go 1.8+)
  5. ReadHeaderTimeout: 0(Go 1.8+)

要自定义这些参数,必须显式创建 http.Server 结构体。以下是示例代码:

server := &http.Server{
    Addr:              ":443",
    Handler:           http.HandlerFunc(someRouter),
    ReadTimeout:       10 * time.Second,
    ReadHeaderTimeout: 5 * time.Second,
    WriteTimeout:      10 * time.Second,
    IdleTimeout:       30 * time.Second,
    MaxHeaderBytes:    1 << 18, // 256KB
}

log.Fatal(server.ListenAndServeTLS(
    pathToCerFile,
    pathToKeyFile,
))

对于TLS配置,还可以通过 TLSConfig 字段进行更精细的控制:

server := &http.Server{
    Addr:    ":443",
    Handler: http.HandlerFunc(someRouter),
    TLSConfig: &tls.Config{
        MinVersion: tls.VersionTLS12,
        CipherSuites: []uint16{
            tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
            tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
        },
    },
    ReadTimeout:  10 * time.Second,
    WriteTimeout: 10 * time.Second,
}

log.Fatal(server.ListenAndServeTLS(
    pathToCerFile,
    pathToKeyFile,
))

注意端口号:HTTPS通常使用443端口,HTTP使用80端口。示例中使用了标准HTTPS端口。

回到顶部