Почему http-ответ в chunked Transfer-Encoding только для некоторых клиентов - PullRequest
3 голосов
/ 19 ноября 2009

У меня есть приложение asp.net mvc, работающее на IIS 7. Проблема, с которой я сталкиваюсь, заключается в том, что в зависимости от клиента ответ может быть получен (как видно из fiddler) как "chunked Transfer-Encoding. Что я не могу Я понимаю, почему это происходит только с некоторыми из моих клиентов (даже если два компьютера находятся в одной сети с одним браузером (IE 8), а не с каждым, или наоборот?

Может ли кто-нибудь объяснить мне это?

Извините за позднее обновление, но проблема оказалась в результате того, как пользователь достиг сервера. Если бы пользователь был подключен к локальной сети через vpn-соединение, прокси-сервер был бы обойден, иначе прокси-сервер был бы использован. Это привело к двум различным результатам.

Ответы [ 2 ]

2 голосов
/ 19 ноября 2009

Кодированное кодирование включается на стороне сервера, если вы преждевременно очищаете выходной поток. У вас есть какой-нибудь специфичный для агента пользователя код, который может вызывать Flush ()?

1 голос
/ 19 ноября 2009

RFC 2616 говорит :

Все приложения HTTP / 1.1 ДОЛЖНЫ быть в состоянии принимать и декодировать "фрагментированное" кодирование передачи

Transfer-Encoding: chunked определено для HTTP / 1.1. Некоторые из ваших клиентов используют HTTP / 1.0 или даже (дрожь) 0,9? В этом случае сервер не должен использовать кодировку передачи, так как он не является частью протокола.

Хотя большинство современных клиентов понимают HTTP / 1.1, у большинства есть возможность понизиться до 1.0 при использовании прокси (по историческим причинам - некоторые старые прокси имели ошибочные реализации 1.1). Так что, хотя браузер может понимать 1.1, он может запросить 1.0, если это будет указано.

Пример: MSIE 6+ имеет это в диалоговом окне «Свойства обозревателя» - вкладка Advanced - HTTP 1.1 settings - флажки «Use HTTP 1.1» и «Use HTTP 1.1 through proxy connections».

Кроме того, chunked-кодирование не активируется для всех ответов - обычно сервер включает его, когда Content-Length не установлен или когда буфер вывода очищен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...