> Чаще всего, сервак буферизирует какую то часть страницы > (около килобайта), если за этот килобайт страница Да наверное больше. Может порядка 64К? во всяком случае
> Есть подозрение, что если ты сгенерируешь (обязательно > скриптом, ибо размер статической html страницы серверу > известен всегда) страницу на несколько десятков килобайт, > то она начнет отдаваться еще до того, как ты закончишь > генерацию и как раз в chunked TE. Очень здравая мысль, спасибо. Я и сам это смутно продозревал, но как-то до конца не додумал. Обязательно попробую и сообщу о результатах.
Кста, тот клиент говорил что у него страницы получаются по 300 с чем-то килобайт, так что вполне возможно что IIS использует chunked режим при превышении какого-то порога
Хотя вот я сейчас только что попробовал у себя IIS отдал обычным способом страницу
Content-Length: 115621
так что есть над чем подумать. Может это как-то зависит от наличия физ памяти на компе или еще от чего.
Мне нужно заставить чтоб IIS возвращал chunked ответ для тестирования локально.
Более того я знаю одного мужика который получил такой эффект и из-за этого у него некоторые проблемы. При запросе его сервер возвращает chunked ответ, если запрашивается ASP страница.
В заголовке ответа есть такое поле
Tranfer-Encoding: chunked
Ну и дальше в соответсвии с RFC
Если запрашиваетс любая статическая информация, то все как обычно. Как это у него получается -объяснит не может.
Вопрос:
Кто нибудь знает как это сделать? Мне этот режим нужен для тестов.
Есть подозрение, что как-то можно в ASP коде страницы как-то это задать. В MSDN порылся ничего не нашел (плохо искал?). Может кто-нибудь подкинет хоть какую-нибудь инфу по теме?
Кста, в мсдн нашел только как разрешать chunked режим (переменная AspEnableChunkedEncoding). Но она и так включена по умолчанию.
Chunked encoding придуман для того, чтобы отдавать страницы, размер которых неизвестен заранее18.09.06 21:20 Автор: amirul <Serge> Статус: The Elderman
> Вопрос: > Кто нибудь знает как это сделать? Мне этот режим нужен для > тестов.
Чаще всего, сервак буферизирует какую то часть страницы (около килобайта), если за этот килобайт страница закончилась, то transfer-encoding используется identity, а длина указывается в Content-Length.
Иначе формируется хэдер, в котором указано chunked TE, а уже полученные данные загоняются собственно в первый chunk.
> Есть подозрение, что как-то можно в ASP коде страницы > как-то это задать. В MSDN порылся ничего не нашел (плохо > искал?). Может кто-нибудь подкинет хоть какую-нибудь инфу > по теме? > > Кста, в мсдн нашел только как разрешать chunked режим > (переменная AspEnableChunkedEncoding). Но она и так > включена по умолчанию.
Есть подозрение, что если ты сгенерируешь (обязательно скриптом, ибо размер статической html страницы серверу известен всегда) страницу на несколько десятков килобайт, то она начнет отдаваться еще до того, как ты закончишь генерацию и как раз в chunked TE.
Да наверное больше. Может порядка 64К? во всяком случае19.09.06 11:32 Автор: drpops Статус: Незарегистрированный пользователь
> Чаще всего, сервак буферизирует какую то часть страницы > (около килобайта), если за этот килобайт страница Да наверное больше. Может порядка 64К? во всяком случае
> Есть подозрение, что если ты сгенерируешь (обязательно > скриптом, ибо размер статической html страницы серверу > известен всегда) страницу на несколько десятков килобайт, > то она начнет отдаваться еще до того, как ты закончишь > генерацию и как раз в chunked TE. Очень здравая мысль, спасибо. Я и сам это смутно продозревал, но как-то до конца не додумал. Обязательно попробую и сообщу о результатах.
Кста, тот клиент говорил что у него страницы получаются по 300 с чем-то килобайт, так что вполне возможно что IIS использует chunked режим при превышении какого-то порога
Хотя вот я сейчас только что попробовал у себя IIS отдал обычным способом страницу
Content-Length: 115621
так что есть над чем подумать. Может это как-то зависит от наличия физ памяти на компе или еще от чего.
Получил я chunked режим. Ура!!!19.09.06 12:27 Автор: drpops Статус: Незарегистрированный пользователь
Получил я chunked режим. Ура!!!
если в начало ASP кода ставишь
Response.Buffer = false
то страница отдается в chunked режиме при превышении какого-то размера. Правда появляются кое-какие ограничения по АСП коду. Например нельзя писать что нибудь в заголовок (например куку) если страница уже начала формироваться и заголовок уже сформирован.
Но это легко обходится. Типа аккуратнее писать надо :)
Когда уже написал, у меня появилась мысль19.09.06 13:48 Автор: amirul <Serge> Статус: The Elderman
Что перед переключением в chunked режим ожидается не какой то конкретный размер, а какое то кокретное время. Вся идея chunked режима в том, что начать передавать как можно быстрее, чтобы клиент мог решить нужно оно ему или нет. Если вся страница сгенерилась очень быстро, то соответственно и передастся она вся, а вот если скрипт разбавить sleep-ами, то вполне возможно IIS все таки перескочил бы в chunked без дополнительных усилий
> Получил я chunked режим. Ура!!! > если в начало ASP кода ставишь > Response.Buffer = false > то страница отдается в chunked режиме при превышении > какого-то размера. Правда появляются кое-какие ограничения > по АСП коду. Например нельзя писать что нибудь в заголовок > (например куку) если страница уже начала формироваться и > заголовок уже сформирован.
Заголовки писать можно, но не все, а только entity-header-ы. Например дату последнего изменения (для кеша) можно указать после генерации. Эти хедеры попадают в трейлер chunked передачи и абсолютно равноправны с прочими хэдерами.
> Но это легко обходится. Типа аккуратнее писать надо :) Ну вообще да, message-header-ы (типа той же куки) не шибко зависят от контента и могут быть посланы заранее, а entity-header-ы слать можно.
Чайницкий вопрос можно ;): а что такое "entity-header-ы" и в...19.09.06 14:20 Автор: drpops Статус: Незарегистрированный пользователь
> Заголовки писать можно, но не все, а только > entity-header-ы. Например дату последнего изменения (для > кеша) можно указать после генерации. Эти хедеры попадают в > трейлер chunked передачи и абсолютно равноправны с прочими > хэдерами. Чайницкий вопрос можно ;): а что такое "entity-header-ы" и в чем их принципиальное отличие от других хедеров
Дык rfc2616 в помощь19.09.06 18:21 Автор: amirul <Serge> Статус: The Elderman
Спасибо за помошь :) rfc2616 - мой любимый rfc :)
> Ы? Честно говоря из вышесказанного непонятно куда отнести заголовок Set-Cookie и опять же не совсем ясно почему какие-то заголовки можно менять а какие нет :) Принципиального отличия не вижу.
Я поступил проще, ASP движок ругнулся что мол генерация страницы начата и сейчас уже нельзя менять заголовок (при включенной буферизации такого не было) Я взял этот кусок кода, где кука вешается повыше переместил и все дела. А в копаться в документации че-то в лом было.
> Спасибо за помошь :) rfc2616 - мой любимый rfc :) > > Ы? > Честно говоря из вышесказанного непонятно куда отнести > заголовок Set-Cookie и опять же не совсем ясно почему > какие-то заголовки можно менять а какие нет :) > Принципиального отличия не вижу.
http message может быть либо request-ом либо response-ом
И request и response состоят из start-line-а, хэдеров и тела. entity - полезная нагрузка, которая цепляется к http-сообщению. Вот и разделяются хэдеры, имеющие отношение к самому протоколу (сообщению) и хэдеры, связанные с этой самой нагрузкой. не-entity-хэдеры есть общие и у request-а и respnse-а, а есть раздельные. Вот их то и нельзя переносить в конец. Все остальные - можно.
> Я поступил проще, ASP движок ругнулся что мол генерация > страницы начата и сейчас уже нельзя менять заголовок (при > включенной буферизации такого не было) Я взял этот кусок > кода, где кука вешается повыше переместил и все дела. А в > копаться в документации че-то в лом было.
Есть такой general-header как Trailer. В трейлеры нельзя выносить хэдеры Content-Length, Transfer-Encoding и Trailer (хотя странно, последние два не являются entity хэдерами в соотвествии с тем же rfc). Просто указываешь при помощи Trailer какие хэдеры пойдут в трейлере (хотя 14.40 говорит, что ты не обязан этого делать) и сервак должен смириться с этим.