Дилемма Content-Length и httpCompression

Мое приложение ASP.NET возвращает объект JSON пользователю, он содержит данные в двоичной кодировке. Из-за этого я решил включить HTTP-сжатие, и проблема началась с Content-Length.

Если я включаю сжатие, заголовок Content-Length игнорируется, а отправка ответа и соединение не закрывается немедленно. Соединение все еще открыто в течение примерно 15 секунд после отправки всех данных.

Я хотел бы включить HTTP-сжатие, но не знаю, как решить проблему с заголовком Content-Length.

context.Response.AddHeader("Content-Length", jsonObject.ToString().Length.ToString());
context.Response.Write(jsonObject);
context.Response.Flush();
context.Response.Close();

person Tomas    schedule 03.10.2011    source источник
comment
В чем проблема? Уточните, в чем вы хотели бы, чтобы мы помогли.   -  person Jeremy McGee    schedule 03.10.2011
comment
В чем проблема, кроме того, что соединение какое-то время открыто?   -  person jgauffin    schedule 03.10.2011
comment
Проблема в том, что соединение не закрывается в течение примерно 15 секунд после отправки данных. Этот код используется в Online API, и если соединение не разорвано, клиент остается на связи. Если добавлен Content-Length, все работает нормально, соединение закрывается сразу после отправки данных. К сожалению, Content-Length игнорируется при HTTP-сжатии. Как получить Content-Length и HTTP-сжатие?   -  person Tomas    schedule 03.10.2011


Ответы (1)


Content-Length представляет длину передаваемых данных, в вашем случае это сжатые байты. См. Этот вопрос SO, ответ на который ссылается на соответствующий RFC: длина содержимого при использовании сжатия http

В случае, если HTTP-сжатие происходит через веб-сервер (а не через ваш код), я предлагаю вам попробовать добавить заголовок длины содержимого самостоятельно. Надеюсь, веб-сервер добавит его правильно.

Это можно проверить с помощью Chrome на странице http://httpd.apache.org/, если посмотреть на разработчика. console вы увидите, что Content-Length будет намного меньше, чем фактическая несжатая страница в байтах.

person VinayC    schedule 03.10.2011