【发布时间】:2015-11-18 10:26:28
【问题描述】:
如果我有一个用于 POST 请求的基本 http 处理程序,如果负载大于 100 KB,我该如何停止处理?
据我了解,在我的 POST 处理程序中,服务器在幕后流式传输 POSTED 数据。但是,如果我尝试访问它,它会阻止正确吗? 如果文件大小超过 100 KB,我想停止处理。
【问题讨论】:
-
Here 是 LimitReader 的文档
标签: go
如果我有一个用于 POST 请求的基本 http 处理程序,如果负载大于 100 KB,我该如何停止处理?
据我了解,在我的 POST 处理程序中,服务器在幕后流式传输 POSTED 数据。但是,如果我尝试访问它,它会阻止正确吗? 如果文件大小超过 100 KB,我想停止处理。
【问题讨论】:
标签: go
使用http.MaxBytesReader 限制从客户端读取的数据量。执行这行代码
r.Body = http.MaxBytesReader(w, r.Body, 100000)
在调用 r.ParseForm、r.FormValue 或任何其他读取正文的请求方法之前。
使用io.LimitedReader 包装请求正文会限制应用程序读取的数据量,但不一定限制服务器代表应用程序读取的数据量。
检查the request content length 是不可靠的,因为在使用分块编码时该字段未设置为实际的请求正文大小。
【讨论】:
http.MaxBytesReader,尽管它来自(至少)Go 1.0!谢谢,现在需要更新我的一些 LimitedReader 用例。
我相信您可以简单地检查http.Request.ContentLength 参数以了解发布请求的大小,然后再决定是继续执行还是返回错误(如果大于预期)。
【讨论】: