Я искал вокруг и, насколько я могу судить, запросы формы POST уже ограничены 10 МБ (http://golang.org/src/net/http/request.go#L721).Целесообразно ли (далее) ограничить размер форм при использовании golang?
Если бы я хотел уменьшить это в моем методе ServeHTTP
, я не уверен, как правильно это сделать. Я бы попробовал что-то вроде этого:
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize)
err := r.ParseForm()
if err != nil {
//redirect to some error page
return
}
Но вернулось бы при ошибке закрыть соединение? Как я мог бы запретить читать все? Я нашел это: https://stackoverflow.com/a/26393261/2202497, но что, если длина контента не установлена и в середине чтения я понимаю, что файл слишком большой.
Я использую это как меру безопасности, чтобы не допустить, чтобы кто-то извратил ресурсы моего сервера.
Способ, которым вы предлагаете, выглядит хорошо. Не прочитает все, или ограничение на 10 МБ stdlib тоже будет неэффективным. Огромный POST без Content-Length не будет генерироваться большинством браузеров/пользовательских агентов, и я думаю, что зависание запроса является разумным ответом, если это произойдет. – twotwotwo
Я думаю, что это преждевременная оптимизация. Пока вы не заметите, что вы получаете необычно высокий трафик, вы должны просто оставить его как можно проще.Уверен, у вас много других приоритетных задач, которые вам нужно выполнить. : P – Populus
@Populus Я понял. На данный момент я не слишком обеспокоен этим. Однако я постараюсь ответить на этот вопрос. – John