问题:Go 中只接受来自 Localhost 的 HTTP 连接?

我在 Golang 中有一个简单的 HTTP 服务器:

h := http.NewServeMux()
h.Handle("/somepath", MyHandler)

s := &http.Server{
    Addr:    "1234",
    Handler: h,
}   

s.ListenAndServe();

在调用者不是本地主机的情况下断开连接的最佳方法是什么?目前我正在考虑检查底层连接信息并确保 IP 地址为127.0.0.1,但这会在最终断开连接之前浪费大量资源(并运行一大堆 Go 代码)。理想情况下,我可以检测 Golang 服务器以根据 IP 地址丢弃初始 TCP SYN 数据包,而根本不创建 TCP 连接(或显示此端口正在侦听)。

这里最干净的道路是什么?

解答

VonC的评论转换为答案。

您可以通过在您的http.Server.Addrhttp.ListenAndServe中设置host:port来绑定主机。

他们在内部使用net.Listen

net.Listen:

对于 TCP 和 UDP,laddr 的语法是“host:port”,如“127.0.0.1:8080”。如果 host 被省略,如 ":8080",Listen 会监听所有可用的接口,而不仅仅是具有给定主机地址的接口。

Logo

更多推荐