Golang net/http是否有类似Apache traceEnable的配置?如何禁用TRACE方法
在Go的net/http包中禁用TRACE方法的方案
Go的net/http包并没有提供类似Apache中traceEnable的直接配置参数。要实现保留GET、POST、HEAD方法支持,同时拒绝TRACE请求并返回405状态码的需求,你可以通过自定义中间件包装原Handler,在中间件逻辑里拦截TRACE方法的请求。
修改后的代码示例
go func() { logger.Log( "level", 1, "action", "start https", "addr", opts.httpsAddr, ) // 拦截TRACE请求的中间件 blockTraceMiddleware := func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodTrace { w.WriteHeader(http.StatusMethodNotAllowed) return } // 非TRACE请求,交给原Handler处理 next.ServeHTTP(w, r) }) } s := &http.Server{ Addr: opts.httpsAddr, // 用中间件包装原server handler Handler: blockTraceMiddleware(server), TLSConfig: &tls.Config{ MinVersion: tls.VersionTLS12, }, } http2.ConfigureServer(s, nil) fatal("failed to start HTTPS: %s", s.ListenAndServeTLS(opts.tlsCrt, opts.tlsKey)) }()
测试验证
使用你提供的命令发起TRACE请求,应该会收到405状态码响应:
curl -v -X TRACE https://<server>
内容的提问来源于stack exchange,提问作者Hons
相关产品推荐
相关产品推荐

