Почему заголовки этого образца SPDY SYN_STREAM явно не сжаты?
Я экспериментирую с протоколом SPDY и наткнулся на образец протокола SPDY (который можно загрузить, используя ссылку " вложение").
Вот как я это посмотрел:
- Откройте файл pcapng в Wireshark 1.12.2 (или новее)
- Щелкните правой кнопкой мыши на любом фрейме SSL/TLS и перейдите в Настройки протокола -> Список ключей RSA...
- Нажмите новый и введите IP-адрес 0.0.0.0, порт 443, протокол Spdy и путь к этому файлу ключа,
- Щелкните правой кнопкой мыши на любом кадре SPDY, перейдите в Настройки протокола -> Разархивировать заголовки SPDY, чтобы отключить распаковку заголовка SPDY.
- Перейдите к кадру 45 и обратите внимание, что в слое "SPDY: SYN_STREAM" после выделения "Блок заголовка" шестнадцатеричный дамп ниже доступен для чтения.
Согласно спецификации SPDY, это должно быть сжато. Почему я вижу это? Есть ли способ отключить сжатие заголовка в протоколе SPDY? Я использую Wireshark неправильный путь?
1 ответ
О спецификации
Проект, на который вы ссылаетесь, гласит:
Все содержимое блока заголовка "имя / значение" сжимается с помощью zlib. Существует один поток zlib для всех пар имя-значение в одном направлении соединения. SPDY использует SYNC_FLUSH между каждым сжатым кадром.
Замечания по реализации: механизм сжатия может быть настроен на скорость или размер. Оптимизация по размеру увеличивает использование памяти и использование процессора. Поскольку блоки заголовков обычно невелики, разработчики могут захотеть уменьшить размер окна механизма сжатия с 15 бит по умолчанию (окно 32 КБ) до более чем 11 бит (окно 2 КБ). Точная настройка выбирается компрессором, декомпрессор будет работать с любой настройкой.
Это не обеспечивает какого-либо уровня сжатия. Фактически, вы можете использовать zlib вообще без сжатия, это поддерживается форматом zlib:
Уровень 0 на самом деле вообще не сжимает и фактически немного расширяет данные, создавая формат zlib (это не побайтная копия входных данных).
О образце
Я связался с автором образца. Оказывается, он использовал nginx для своего эксперимента. В предоставленных им документах nginx был настроен так:
# SPDY
server {
listen 443 ssl spdy;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key key.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers DES-CBC3-SHA;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
Однако в документации nginx говорится, что сжатие заголовков должно быть указано явно:
Syntax: spdy_headers_comp level; Default : spdy_headers_comp 0;
Устанавливает уровень сжатия заголовка. [...] Специальное значение 0 отключает сжатие заголовка.
Это означает, что сжатие заголовков, скорее всего, не было включено для эксперимента.
Мой вывод
- Да, вы можете отключить сжатие заголовков в SPDY, но вы должны сохранить формат zlib с уровнем сжатия 0
- Вы используете Wireshark правильно. Используемый вами образец был создан с уровнем сжатия 0