Golang net/http 后端阻塞请求

Golang net/http Backend blocking requests

有没有办法 reject/block 在 go net/http “listenandserver” 中发出请求? 在我的例子中,我希望只允许带有用户代理“test 1.0”的请求。其他一切都将被阻止。
“我还想限制速率。例如:(如果每秒来自同一 IP 的请求在第二个块上超过 50 R/S 1 小时......)”我可以做到这一点,但正如我所说,我不知道如何阻止请求。

package main

import (
    "net/http"
)

func handle(w http.ResponseWriter, r *http.Request) {
    if r.UserAgent() == "test/1.0" {
        //Allow
    } else {
        //Block request
    }
}

func main() {
    http.HandleFunc("/", handle)
    http.ListenAndServe(":8080", nil)

}

有几个选项。第一个是 return 一个 error 响应:

func handle(w http.ResponseWriter, r *http.Request) {
    if r.UserAgent() == "test/1.0" {
        //Allow
    } else {
        http.Error(w, "forbidden", http.StatusForbidden)
        return
    }
}

第二种是hijack来自服务器的连接并粗鲁地关闭连接:

func handle(w http.ResponseWriter, r *http.Request) {
    if r.UserAgent() == "test/1.0" {
        //Allow
    } else {
        if h, ok := w.(http.Hijacker); ok {
            c, _, err := h.Hijack()
            if err != nil {
                c.Close()
                return
            }
        }
        // fallback to error response
        http.Error(w, "forbidden", http.StatusForbidden)
        return
    }
}