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