репрезентует длину тела сообщения, а не длину самой сущности. Разница в том, что тело сообщения может быть закодировано, например, сжато условным gzip. Тело сущности - декодированное тело сообщения. Я в своем фреймворке пользователю подаю сразу готовенькое и декодированное. В таком случае, ContentLength может не соответствовать реальному количеству байт, прочитанных из тела. Это может создать проблемы для пользователя?
А как условный прокси сервер написанный на фреймворке должен это корректно обработать?
А если нету заголовка Content-Length?
Подозреваю, что когда прокси-сервер жмет в gz, он и переписывает этого заголовок на новое значение?
он разве не обязательный по протоколу?
судя по спеке вы не должны модифицировать программно это значение, если верно вас понял
Это может создать проблемы в очень неожиданных местах. По этому хедеру клиент понимает, что передача сообщения завершена и коннект можно реюзать. Неверно выставленный хедер может сломать работу клиента
Который дергает ручку
Клиент который дёргает ручку никак не увидит что внутри фреймворка переписали хидер с длиной, более того автор вопроса про переписывание и не писал
А зачем такие сложности? Чтобы два раза не аллоцировать тело?
если не указан Connection: close, то тело будет обработано, как следующий запрос. Что, вероятнее всего, приведет к ошибке парсинга
не в аллокациях, а дизайне вопрос. Например, ожидает ли пользователь, что request.ContentLength будет строго равен размеру прочитанного тела?
ну да, Content-Length должен быть равен длине тела сообщения, а не сущности. Иными словами - фактический размер передаваемых данных
нет, значение я модифицировать не буду, да и не смогу
Если писать прокси, то 1) потерялось значение content length, и передавать его дальше неверно, и об этом надо капсом в доке писать 2) фреймворк задекодил тело, теперь нужно руками энкодить, если нужно было со сжатием или в точности передать тело - некруто, лишняя работа 3) можно было как то хитро использовать io.CopyBuffer с буфером зависимым от length, это теперь тоже нельзя делать 4) явное поведение лучше неявного
вот прокси как раз может спокойно модифицировать запрос, такое поведение будет некорректным для гейтвея
Да. Стабильно будет проверять. Еще есть вариант с посылкой частями. Это же часть протокола.
А range-bytes поддерживаешь?)
это разве не для отдачи данных сервером?
Оно самое, да. Способ клиента сказать какой диапазон байт ему нужен
у меня есть всего одна точка, в которой это можно поддерживать (и там оно не поддерживается)
Обсуждают сегодня