Golang net/http Backend blocking requests

有没有办法在go net/http“listenandserver”中拒绝/阻止请求?在我的情况下,我希望只允许具有useragent“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)


}


人到中年有点甜
浏览 97回答 1
1回答

紫衣仙女

有几种选择。第一种是返回错误响应:func handle(w http.ResponseWriter, r *http.Request) {    if r.UserAgent() == "test/1.0" {        //Allow    } else {        http.Error(w, "forbidden", http.StatusForbidden)        return    }}第二种是从服务器劫持连接并粗鲁地关闭连接: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    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go