请求正文太大导致 Go 中的连接重置

Sam*_*Sam 5 multipartform-data go

我有一个简单的多部分表单,可以上传到 Go 应用程序。我想对上传大小设置限制,所以我做了以下操作:

func myHandler(rw http.ResponseWriter, request *http.Request){  
    request.Body = http.MaxBytesReader(rw, request.Body, 1024)
    err := request.ParseMultipartForm(1024)
    if err != nil{
    // Some response.
    } 
}  
Run Code Online (Sandbox Code Playgroud)

每当上传超过最大大小时,我都会重置连接,如下所示: 在此输入图像描述

但代码仍在继续执行。我似乎无法向用户提供任何反馈。我宁愿说“您已超出大小限制”,而不是切断连接。这可能吗?

The*_*ppo 5

该代码按预期工作。描述http.MaxBytesReader

MaxBytesReader 与 io.LimitReader 类似,但旨在限制传入请求正文的大小。与 io.LimitReader 相比,MaxBytesReader 的结果是 ReadCloser,对于超出限制的 Read 返回非 EOF 错误,并在调用其 Close 方法时关闭底层读取器。

MaxBytesReader 可以防止客户端意外或恶意发送大请求而浪费服务器资源。

您可以io.LimitReader只读取 N 个字节,然后自行处理 HTTP 请求。