安全RCE之未授权访问分析(5)

2023-05-02 来源:飞速影视
net/http
在golang中可以通过几行代码轻松实现一个http服务
package mainimport ( "net/http" "fmt")func main() { http.HandleFunc("/", h) http.ListenAndServe(":2333",nil)}func h(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "hello world")}
其中的http.HandleFunc()是一个注册函数,用于注册路由。具体实现为绑定路径/和处理函数h的对应关系,函数的类型是(w http.ResponseWriter, r *http.Request)。而ListenAndServe()函数封装了底层TCP通信的实现逻辑进行连接监听。第二个参数用于全局请求处理。如果没有传入自定义的handler。则会使用默认的DefaultServeMux对象处理请求最后到达处理函数。
type Handler interface { ServeHTTP(ResponseWriter, *Request)}
在go中的任何结构体,只要实现了上方的ServeHTTP方法,也就是实现了Handler接口,并进行了路由注册。内部就会调用其ServeHTTP方法处理请求并返回响应。但是我们看到函数并不是一个结构体方法,为什么可以处理请求呢?原来在函数调用后,内部还会调用HandlerFunc(func(ResponseWriter, *Request))将传入的函数转换为一个具有ServeHTTP方法的handler。
具体定义如下。HandlerFunc为一个函数类型,类型为func(ResponseWriter, *Request)。这个类型有一个方法为,实现了这个方法就实现了Handler接口,就成了一个Handler。上方的调用就是类型转换。
type HandlerFunc func(ResponseWriter, *Request)// ServeHTTP calls f(w, r).func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) { f(w, r)}
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号