为什么这个SPDY SYN_STREAM样本的标题显然是未压缩的?

时间:2014-12-13 00:25:31

标签: wireshark zlib spdy

我正在尝试使用SPDY协议,我偶然发现a sample of SPDY protocol(可以使用“attachment”链接下载)。

以下是我对它的看法:

  1. 在Wireshark 1.12.2(或更新版本)中打开pcapng文件
  2. 右键单击任何SSL / TLS框架,然后转到协议首选项 - > RSA密钥列表......
  3. 点击新建,输入IP地址0.0.0.0,端口443,协议spdy和this key file的路径,
  4. 右键单击任何SPDY帧,转到协议首选项 - >解压缩SPDY标头以禁用SPDY标头解压缩
  5. 转到第45帧并观察在“SPDY:SYN_STREAM”图层中,突出显示“Header Block”后,下面的十六进制转储是可读的
  6. 根据SPDY规范,this should be compressed。为什么我能看到这个?有没有办法在SPDY协议中禁用标头压缩?我用错误的方法使用Wireshark吗?

1 个答案:

答案 0 :(得分:2)

关于规范

你联系的草案说明了这一点:

  

使用zlib 压缩名称/值标题块的全部内容。在连接的一个方向上,所有名称值对都有一个zlib流。 SPDY在每个压缩帧之间使用SYNC_FLUSH。

     

实施说明:可以调整压缩引擎以支持速度或大小。优化大小会增加内存使用和CPU消耗。因为标头块通常很小,所以实现者可能希望将压缩引擎的窗口大小从默认的15位(32KB窗口)减少到更像11位(2KB窗口)。确切的设置由压缩器选择,解压缩器可以在任何设置下使用。

它不会强制执行任何压缩级别。实际上,您可以使用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
  • 的情况下创建的