170 похожих чатов

ContentLength в объекте запроса репрезентует заголовок Content-Length. Но этот заголовок

репрезентует длину тела сообщения, а не длину самой сущности. Разница в том, что тело сообщения может быть закодировано, например, сжато условным gzip. Тело сущности - декодированное тело сообщения. Я в своем фреймворке пользователю подаю сразу готовенькое и декодированное. В таком случае, ContentLength может не соответствовать реальному количеству байт, прочитанных из тела. Это может создать проблемы для пользователя?

21 ответов

8 просмотров

А как условный прокси сервер написанный на фреймворке должен это корректно обработать?

А если нету заголовка Content-Length?

Подозреваю, что когда прокси-сервер жмет в gz, он и переписывает этого заголовок на новое значение?

Andrey S
А если нету заголовка Content-Length?

он разве не обязательный по протоколу?

судя по спеке вы не должны модифицировать программно это значение, если верно вас понял

Это может создать проблемы в очень неожиданных местах. По этому хедеру клиент понимает, что передача сообщения завершена и коннект можно реюзать. Неверно выставленный хедер может сломать работу клиента

Maxim Biryukov
Какой клиент?

Который дергает ручку

Владимир Гришин
Который дергает ручку

Клиент который дёргает ручку никак не увидит что внутри фреймворка переписали хидер с длиной, более того автор вопроса про переписывание и не писал

А зачем такие сложности? Чтобы два раза не аллоцировать тело?

Павло-Побуджувач Автор вопроса
Andrey S
А если нету заголовка Content-Length?

если не указан Connection: close, то тело будет обработано, как следующий запрос. Что, вероятнее всего, приведет к ошибке парсинга

Павло-Побуджувач Автор вопроса
Andrey Likhachev
А зачем такие сложности? Чтобы два раза не аллоцир...

не в аллокациях, а дизайне вопрос. Например, ожидает ли пользователь, что request.ContentLength будет строго равен размеру прочитанного тела?

Павло-Побуджувач Автор вопроса
Alex
Подозреваю, что когда прокси-сервер жмет в gz, он ...

ну да, Content-Length должен быть равен длине тела сообщения, а не сущности. Иными словами - фактический размер передаваемых данных

Павло-Побуджувач Автор вопроса
Александр Костюченко
судя по спеке вы не должны модифицировать программ...

нет, значение я модифицировать не буду, да и не смогу

Если писать прокси, то 1) потерялось значение content length, и передавать его дальше неверно, и об этом надо капсом в доке писать 2) фреймворк задекодил тело, теперь нужно руками энкодить, если нужно было со сжатием или в точности передать тело - некруто, лишняя работа 3) можно было как то хитро использовать io.CopyBuffer с буфером зависимым от length, это теперь тоже нельзя делать 4) явное поведение лучше неявного

Павло-Побуджувач Автор вопроса
Maxim Biryukov
Если писать прокси, то 1) потерялось значение co...

вот прокси как раз может спокойно модифицировать запрос, такое поведение будет некорректным для гейтвея

Павло Побуджувач
не в аллокациях, а дизайне вопрос. Например, ожида...

Да. Стабильно будет проверять. Еще есть вариант с посылкой частями. Это же часть протокола.

А range-bytes поддерживаешь?)

Павло-Побуджувач Автор вопроса
Roman Timofeev
А range-bytes поддерживаешь?)

это разве не для отдачи данных сервером?

Павло Побуджувач
это разве не для отдачи данных сервером?

Оно самое, да. Способ клиента сказать какой диапазон байт ему нужен

Павло-Побуджувач Автор вопроса
Roman Timofeev
Оно самое, да. Способ клиента сказать какой диапаз...

у меня есть всего одна точка, в которой это можно поддерживать (и там оно не поддерживается)

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
Ребята, а из API геокодеров (по адресам в РФ) что сейчас актуального и есть ли среди актуального бесплатное/с нормаотным лимитом запросов? ситуация простая - на сайте периоди...
Dreamer_0x01 VeseloV
8
Добрый день, а есть ли возможность завернуть уже зашифрованный пасс в креденшл, в интернете натыкаюсь только на создание пары и ее шифровки, но тогда все равно нужно расшифров...
SSS
1
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Есть тут те у кого дети есть + 2 работы + в зал ходят + в семейной жизни все хорошо?
Abdul-Aziz M.
13
Карта сайта