Сброс соединения при запросе «Ожидается: 100-Продолжить» - PullRequest
0 голосов
/ 13 марта 2020

Я хочу возвращать ответ «слишком большое тело» всякий раз, когда тело запроса больше установленного. Однако, когда запрос имеет заголовок «Expect», соединение может быть сброшено, если тело запроса не прочитано до конца.

I read «Golang загрузка файла: закрыть соединение, если файл слишком большой"и добавлена ​​функция проверки. Функция проверяет request.ContentLength и возвращает ответ об ошибке, если длина больше заданной.

if !checkExpect(request.Header) { // check if "Expect" header exists
    // do nothing...( this block is to take C1 coverage )
} else {
    return NewError("body is too large")
}
buf := bytes.NewBuffer([]byte{})
_, err := io.CopyN(buf, request.Body, *rsc.maxSize+1)
if err == nil {
    return NewError("body is too large")
} else if err == io.EOF {
    // do nothing...( this block is to take C1 coverage )
} else {
    return NewError("failed to read")
}

Но, если длина меньше, чем реальный размер тела, тело чтения функции и соединение сбрасываются. Кроме того, если запрос имеет заголовок «Transfer-Encoding», request.ContentLength имеет значение -1. ​​

Почему соединение сбрасывается, когда тело запроса не читается до конца? Если заголовок «Content-Length» скрыт или имеет отрицательное значение, как сохранить соединение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...