Если браузер может отображать Accept-Encoding для deflate, может ли он обрабатывать сжатые ответы .NET? - PullRequest
4 голосов
/ 17 мая 2011

Я ищу этот метод в этом HTTPCombiner :

private bool CanGZip(HttpRequest request)
{
    string acceptEncoding = request.Headers["Accept-Encoding"];
    if (!string.IsNullOrEmpty(acceptEncoding) &&
         (acceptEncoding.Contains("gzip") || acceptEncoding.Contains("deflate")))
        return true;
    return false;
}

Если это возвращает true, то ответ сжимается с использованием GZipStream. Это правильно?

Ответы [ 3 ]

3 голосов
/ 17 мая 2011

GZip (который основан на Deflate) и Deflate - это два разных алгоритма, поэтому запрос «deflate» определенно не должен возвращать сжатый контент.

Однако это легко исправить, просто используяGZipStream, если заголовок accept содержит «gzip» и DeflateStream для «deflate».

Оба включены в System.IO.Compression, поэтому вам не нужно кодировать собственный алгоритм дефляции или использовать стороннюю реализацию.

3 голосов
/ 17 мая 2011

Это два разных алгоритма:

Код здесь:

Таким образом, согласно протоколу, это неправильно, как если бы браузер сказал «дайте мне содержимое, используя deflate», вы не должны отправлять его обратно в архиве.

0 голосов
/ 17 мая 2011

Обычно большинство браузеров понимают GZip и Deflate. Они сообщают серверу, указав его в заголовке запроса как Accept-Encoding:gzip, deflate. HTTPCombiner отдает предпочтение GZip. Если оба типа присутствуют, то предпочтение отдается GZip. HttpCombiner будет отправлять контент, только если браузер запрашивает только Defalte.

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