【问题标题】:Stop processing a http POST request if it is larger than x size如果 http POST 请求大于 x 大小,则停止处理
【发布时间】:2015-11-18 10:26:28
【问题描述】:

如果我有一个用于 POST 请求的基本 http 处理程序,如果负载大于 100 KB,我该如何停止处理?

据我了解,在我的 POST 处理程序中,服务器在幕后流式传输 POSTED 数据。但是,如果我尝试访问它,它会阻止正确吗? 如果文件大小超过 100 KB,我想停止处理。

【问题讨论】:

  • Here 是 LimitReader 的文档

标签: go


【解决方案1】:

使用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 用例。
【解决方案2】:

我相信您可以简单地检查http.Request.ContentLength 参数以了解发布请求的大小,然后再决定是继续执行还是返回错误(如果大于预期)。

【讨论】:

  • 我没有投反对票,但如果您没有阅读@Cerise 的回答:检查请求内容长度是不可靠的,因为分块时该字段未设置为实际请求正文大小使用编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 2021-01-30
  • 2013-09-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 2010-12-08
相关资源
最近更新 更多