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

how i can send gzip instade deflate by skip header

本文关键字:gzip instade deflate 头发 何通过      更新时间:2023-10-16

我编写一个c++http服务器(Microsoft http服务器api)

以gzip格式发送html页面文件的

并且gzip文件是静态

例如文件page1.htm和page1.html.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;
}     
.....

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

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

ADD_KNOWN_HEADER(response, HttpHeaderContentEncoding, "gzip" );

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

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

"gzip"answers"deflate"HTTP1.1之间有什么区别编码?

"gzip"是gzip格式,"deflate"是zlib格式。他们可能应该将第二个称为"zlib",以避免与原始deflate压缩数据格式的混淆。而HTTP1.1 RFC 2616正确地指出了RFC 1950中关于"deflate"传输编码的zlib规范,有报道称错误地生成或期望原始数据的服务器和浏览器数据符合RFC 1951中的deflate规范,最值得注意的是微软因此,即使使用zlib格式将是更有效的方法(事实上zlib格式的设计目的),使用"gzip"传输编码可能更可靠,因为选择了HTTP 1.1作者的名称。">

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