【问题标题】:how i can send gzip instade deflate by skip header我如何发送 gzip 而不是通过跳过标头放气
【发布时间】:2014-01-06 11:43:14
【问题描述】:

我写了一个c++ http服务器(微软http服务器api)

以gzip格式发送html页面文件

gzip 文件是静态的

例如文件 page1.htm 和 page1.htm.gz 在同一目录中

根据 http://en.wikipedia.org/wiki/Gzip

我知道 gzip 带有额外的标题 并且 deflate 是 gzip 的一部分

我如何通过跳过标头发送 gzip instade deflate

fileHandle=CreateFile( "page1.htm.gz"  ,dwAccess,dwShare,NULL,dwCreationFlags,dwAttributes,NULL);

....


ADD_KNOWN_HEADER(response, HttpHeaderContentEncoding, "deflate" );

HTTP_DATA_CHUNK dataChunk;
{     
   HTTP_DATA_CHUNK dataChunk;
   response.EntityChunkCount         = 1;                        
   dataChunk.DataChunkType           = HttpDataChunkFromFileHandle;
   dataChunk.FromFileHandle.FileHandle   =fileHandle;
   dataChunk.FromFileHandle.ByteRange.StartingOffset.QuadPart =9;// 9 is gzip header len
   dataChunk.FromFileHandle.ByteRange.Length.QuadPart = HTTP_BYTE_RANGE_TO_EOF;
   response.pEntityChunks=&dataChunk;
}     

 .....

【问题讨论】:

    标签: c++ gzip zlib deflate


    【解决方案1】:

    deflategzip 编码并不完全相同,尽管差异很小。

    当您发送 gzip 时,将您的代码更改为:

    ADD_KNOWN_HEADER(response, HttpHeaderContentEncoding, "gzip" );
    

    如果 gzip 在 Accept-Encoding 中列出,您当然应该这样做。

    这是 gzip 常见问题解答的摘录:

    ““gzip”和“deflate”HTTP 1.1 有什么区别 编码?

    “gzip”是gzip格式,“deflate”是zlib格式。他们 可能应该将第二个称为“zlib”以避免 与原始 deflate 压缩数据格式混淆。虽然 HTTP 1.1 RFC 2616 正确指向 RFC 1950 中的 zlib 规范,用于“deflate”传输编码,有报道称 错误地产生或期望原始放气的服务器和浏览器 根据 RFC 1951 中的 deflate 规范的数据,最值得注意的是 微软。因此,即使使用“放气”传输编码 zlib 格式将是更有效的方法(实际上正是 zlib 格式的设计目的),使用“gzip”传输 由于不幸的选择,编码可能更可靠 HTTP 1.1 作者的名字。”

    http://www.gzip.org/zlib/zlib_faq.html#faq38

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-12
      • 2014-02-16
      • 1970-01-01
      • 2020-10-23
      • 2011-02-11
      • 2020-04-26
      • 2015-06-07
      • 1970-01-01
      相关资源
      最近更新 更多