FiddlerCore, декодирующий ответ sdch

Я получаю странный ответ от сайта, который я искал для анализа с FiddlerCore. В инструментах разработчика chrome, если я проверяю ответ, он выглядит совершенно нормально, в fiddler - нет. Фрагмент кода следующим образом (который работал нормально)

String html = oSession.GetResponseBodyAsString();

Возвращает следующее, которое не является html, обратите внимание, что это образец, а не полная огромная строка.

JRHwJNeR\0���\0\0\u0001��D\0�2�\b\0�\u0016�7]<!DOCTYPE html>\n win\">

Это также завалено "\n" и HTML, как это

\n\n\n\n\n  \n    <meta name=\"treeID\" content=\"dwedxE+pgRQAWIHiFSsAAA==\">\n

Заголовки ответа:

Cache-Control:no-cache, no-store
Connection:keep-alive
Content-Encoding:sdch, gzip
Content-Language:en-US
Content-Type:text/html;charset=UTF-8
Date:Fri, 28 Oct 2016 10:17:02 GMT
Expires:Thu, 01 Jan 1970 00:00:00 GMT
Pragma:no-cache
Server:Apache-Coyote/1.1
Set-Cookie:lidc="b=VB87:g=518:u=60:i=1477649823:t=1477731496:s=AQG-LTdly5mcIjAtiRHIOrKE1TiRWW-l"; Expires=Sat, 29 Oct 2016 08:58:16 GMT; domain=.thedomain.com; Path=/
Set-Cookie:_lipt=deleteMe; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Path=/
Strict-Transport-Security:max-age=0
Transfer-Encoding:chunked
Vary:Accept-Encoding, Avail-Dictionary
X-Content-Type-Options:nosniff
X-Frame-Options:sameorigin
X-FS-UUID:882b3366afaa811400a04937a92b0000
X-Li-Fabric:prod-lva1
X-Li-Pop:prod-tln1-scalable
X-LI-UUID:iCszZq+qgRQAoEk3qSsAAA==
X-XSS-Protection:1; mode=block

Код запуска Fiddler:

  Fiddler.FiddlerApplication.AfterSessionComplete += FiddlerApplication_OnAfterSessionComplete;
   Fiddler.FiddlerApplication.BeforeResponse += delegate(Fiddler.Session oS) {
         oS.utilDecodeResponse(); 
   };

    Fiddler.FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.Default);


  }

Первоначально я предполагал, что это было chunked/gzipped, поэтому я добавил utilDecodeResponse(); на onBeforeResponse, который не имел никакого эффекта!

Просто, чтобы охватить все базы, которые я также пытался вручную декодировать responseBodyBytes в UTF-8, Unicode, Bigendian и т. Д., Просто на случай, если тип содержимого ответа был неправильным, И отключил JavaScript и загрузил страницу, чтобы доказать, что это не было какой-то напуганной шаблонизацией вещь, которая также не имела никакого значения.

Есть идеи?

ОБНОВИТЬ:

В соответствии с информацией, предоставленной Developer & NineBerry ниже, решение выглядит следующим образом:

Чтобы предотвратить кодирование ответа SDCH, вы можете добавить такой обработчик:

    Fiddler.FiddlerApplication.BeforeRequest += delegate (Fiddler.Session oS)
    {
        oS.oRequest["Accept-Encoding"] = "gzip, deflate, br";
    };

Следует отметить, что это не подходит для всего, так как вы вручную устанавливаете заголовки, а не проверяете наличие SDCH, а затем удаляете его, для моих целей это работает нормально, но для использования общих функций прокси-сервера fiddler вы хотелось бы больше логики здесь.

1 ответ

Решение

Кодировка содержимого отображается как SDCH - сжатие общего словаря; поэтому ручное декодирование responseBodyBytes в UTF-8, Unicode, Bigendian и т. д. не будет работать в этом случае.

Вы можете найти более подробную информацию о SDCH здесь - SDCH Ref 1 & SDCH Ref 2

Выдержки из вышеуказанного сайта:

Сжатие общего словаря - это метод кодирования контента, который был предложен еще в 2008 году Google и реализован в Chrome и поддерживается рядом серверов Google. Полное предложение можно получить здесь - https://lists.w3.org/Archives/Public/ietf-http-wg/2008JulSep/att-0441/Shared_Dictionary_Compression_over_HTTP.pdf. Вместо того, чтобы копировать содержимое документа в этом сообщении в блоге, я постараюсь обобщить как можно более кратко:
Вся идея протокола заключается в уменьшении избыточности через HTTP-соединения. Количество "общих данных" в ответах HTTP, очевидно, является значительным - например, вы часто будете видеть, как веб-сайт использует общие колонтитулы на нескольких страницах HTML. Если бы клиент должен был хранить эти общие данные локально в "словаре", серверу нужно было бы только указать клиенту, как реконструировать страницу с использованием этого словаря.

Другие вопросы по тегам