Контент-длина и httpCompression дилемма - PullRequest
1 голос
/ 03 октября 2011

Мое приложение 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();

1 Ответ

2 голосов
/ 03 октября 2011

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

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

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

...