You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 05:54:20