限制请求正文大小的正确方法是按照您的建议进行 *** 作:
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize) err := r.ParseForm()if err != nil { // redirect or set error status pre. return}
当达到限制时,MaxBytesReader
在响应上设置一个标志。设置此标志时,服务器不会读取请求正文的其余部分,并且服务器在从处理程序返回时关闭连接。
如果您担心恶意客户端,则还应该设置Server.ReadTimeout,Server.WriteTimeout以及可能的Server.MaxHeaderBytes。
如果要为所有处理程序设置请求主体限制,则在委派给根处理程序之前,用设置限制的处理程序包装根处理程序:
type maxBytesHandler struct { h http.Handler n int64 } func (h *maxBytesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { r.Body = http.MaxBytesReader(w, r.Body, h.n) h.h.ServeHTTP(w, r) }
在调用ListenAndServe时包装根处理程序:
log.Fatal(http.ListenAndServe(":8080", &maxBytesHandler{h:mux, n:4096))
或配置服务器时:
s := http.Server{ Addr: ":8080", Handler: &maxBytesReader{h:mux, n:4096},}log.Fatal(s.ListenAndServe())
不需要其他答案中建议的补丁。MaxBytesReader是限制请求正文大小的官方方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)