Если браузер может отображать кодировку принятия deflate, может ли он обрабатывать .Загруженные ответы NET?

#c# #.net #http #compression #cross-browser

#c# #.net #http #сжатие #кроссбраузерность

Вопрос:

Я рассматриваю этот метод в этом HTTPCombiner:

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

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

Ответ №1:

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

Некоторый код здесь :

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

Ответ №2:

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

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

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

Ответ №3:

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