Golang中http.ListenAndServeTLS的默认参数是什么
Golang中http.ListenAndServeTLS的默认参数是什么 使用以下代码时:
log.Fatal(http.ListenAndServeTLS(
":80",
pathToCerFile,
pathToKeyFile,
http.HandlerFunc(someRouter),
))
例如,ReadTimeout、WriteTimeout、MaxHeaderBytes 这些选项的值会是多少?
如果我想为这些选项设置自定义值,是否必须使用 &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 的零值配置。具体默认值如下:
- ReadTimeout: 0(无超时限制)
- WriteTimeout: 0(无超时限制)
- MaxHeaderBytes: 1 << 20(1MB)
- IdleTimeout: 0(Go 1.8+)
- 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端口。

