我写了一个c ++ http服务器(Microsoft http server 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;
}
.....
答案 0 :(得分:1)
deflate 和 gzip 编码并不完全相同,尽管差异很小。
发送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中用于“deflate”传输编码的zlib规范,有报道称 不正确地生成或期望原始收缩的服务器和浏览器 RFC 1951中每个deflate specficiation的数据,最值得注意的是 微软。所以即使使用“deflate”传输编码 zlib格式将是更有效的方法(事实上,确切地说 zlib格式的用途是什么,使用“gzip”传输 由于不幸的选择,编码可能更可靠 HTTP 1.1作者的名称。“