Internet Explorer 8中放气+(Internet Explorer 8 + Defl

2019-07-29 14:52发布

我有一个很奇怪的问题。我真的希望有人有一个答案,因为我不知道还有什么地方可以问。

我写在由Apache的执行,并输出HTML代码C ++一个CGI应用程序。 我压缩HTML输出自己 - 从我的C ++应用程序中 - 因为我的虚拟主机不支持mod_deflate模块的某些原因。

我与Firefox 2,火狐3,Opera 9中,Opera 10的,谷歌Chrome,Safari浏览器,IE6,IE7,IE8测试了,甚至wget的。它的工作原理与除IE8 任何东西

IE8只是说:“Internet Explorer无法显示该网页”,没有任何信息。 我知道这是因为压缩的,只是因为它的工作原理,如果我禁用它。

你知道我在做什么错?

我使用zlib压缩它,确切的代码是:

    /* Compress it */
int compressed_output_size = content.length() + (content.length() * 0.2) + 16;
char *compressed_output = (char *)Alloc(compressed_output_size);
int compressed_output_length;
Compress(compressed_output, compressed_output_size, (void *)content.c_str(), content.length(), &compressed_output_length);

/* Send the compressed header */
cout << "Content-Encoding: deflate\r\n";
cout << boost::format("Content-Length: %d\r\n") % compressed_output_length;
cgiHeaderContentType("text/html");
cout.write(compressed_output, compressed_output_length);


static void Compress(void *to, size_t to_size, void *from, size_t from_size, int *final_size)
{
int ret;
z_stream stream;

stream.zalloc = Z_NULL;
stream.zfree = Z_NULL;
stream.opaque = Z_NULL;

if ((ret = deflateInit(&stream, CompressionSpeed)) != Z_OK)
    COMPRESSION_ERROR("deflateInit() failed: %d", ret);

stream.next_out = (Bytef *)to;
stream.avail_out = (uInt)to_size;
stream.next_in = (Bytef *)from;
stream.avail_in = (uInt)from_size;

if ((ret = deflate(&stream, Z_NO_FLUSH)) != Z_OK)
    COMPRESSION_ERROR("deflate() failed: %d", ret);

if (stream.avail_in != 0)
    COMPRESSION_ERROR("stream.avail_in is not 0 (it's %d)", stream.avail_in);

if ((ret = deflate(&stream, Z_FINISH)) != Z_STREAM_END)
    COMPRESSION_ERROR("deflate() failed: %d", ret);

if ((ret = deflateEnd(&stream)) != Z_OK)
    COMPRESSION_ERROR("deflateEnd() failed: %d", ret);

if (final_size)
    *final_size = stream.total_out;
return;
}

Answer 1:

gzip和放气的方法是不一样的......他们都非常接近,但也有标题一些细微的差别,所以,如果你改变的内容编码的,你也应该更改参数的编码方法(特别,窗口大小)!

请参阅: http://apcmag.com/improve_your_site_with_http_compression.htm

也许是其他浏览器都忽略了您的内容编码规范,做一些自动识别,但IE8是不是...

请参阅: http://www.zlib.net/manual.html#deflateInit2

尝试使用:

method=Z_DEFLATED
windowBits=-15  (negative so that the header is suppressed)

并使用“压缩”为内容的编码



Answer 2:

我想澄清一下,我对这个发现,我已经写了我自己的deflate算法,我自己的HTTP服务器,令我非常沮丧IE8也没有认识到我泄了气的内容:

HTTP RFC是http://www.faqs.org/ftp/rfc/rfc2616.pdf 。 第17周的状态都RFC 1950以及执行在HTTP头中放气时RFC 1951被使用。 RFC 1950是简单地定义的首部和尾部字节; deflate算法是在RFC 1951中定义我这个程序符合规范,IE8失败。

当我忽略了RFC 1950,只做RFC 1951年,它通过了。

我会假设,那么,IE8不继2616第17页正确,和所有其他的浏览器都不错,足以接受这两种格式。



文章来源: Internet Explorer 8 + Deflate