如何通过跳过标头发送gzip instade deflate
how i can send gzip instade deflate by skip header
我编写一个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;
}
.....
deflate和gzip编码不完全相同,尽管差异很小。
当您发送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
相关文章:
- ZLib GZIP Returning Z_BUF_ERROR(-5)
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 带有 GZIP 压缩的原型
- 如何让 zlib 输出 gzip 页脚
- C++ mmap 到"fast" 与 gzip 文件的读取耦合
- EOF detection by ZLib Gzip API?
- 使用 libarchive 将 gzip 文件解压缩到内存
- zlib - gzip 的零压缩率
- 压缩算法(例如gzip、zip或snappy)的输出肯定小于输入吗
- 是否有GZIP的测试向量
- 如何通过跳过标头发送gzip instade deflate
- 使用 curl 解压缩 gzip 数据
- 使用 qCompress 使用 GZip 压缩字符串
- 如何将boost::iostreams::mapped_file_source与gzip输入文件一起使用
- Gzip 压缩/解压缩长字符数组
- C++/zlib/gzip压缩和C#GZipStream解压缩失败
- 可以提高iostream读取和压缩gzip文件的速度
- 提升 gzip 解压缩字节数组
- zlib和gzip生成不同的数据
- 将boost gzip压缩器封装在易于使用的函数/类中