私は非常に奇妙な問題を抱えています。誰かに答えがあることを本当に願っています。Internet Explorer 8 + Deflate
私はApacheで実行され、HTMLコードを出力するC++アプリケーションをC++で作成しています。 Webホストは何らかの理由でmod_deflateをサポートしていないので、私は自分のC++アプリケーション内からHTML出力を圧縮しています。
Firefox 2、Firefox 3、Opera 9、Opera 10、Google Chrome、Safari、IE6、IE7、IE8、さらにはwgetでテストしたところ、IE8を除いてANYTHINGと動作します。
IE8では「Internet Explorerはウェブページを表示できません」という情報はまったくありません。私はそれが無効にすると動作するため、圧縮のためだと分かっています。
私が間違っていることを知っていますか?
私はそれを圧縮するためにはzlibを使用し、正確なコードがある:彼らは非常に近いですが、といくつかの微妙な違いがあります... gzipの
/* 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;
}
これは奇妙です。コンテンツのエンコーディングとして「gzip」を送信した場合、IE8では動作しますが、他のブラウザでも動作します: コンテンツエンコーディングエラー 無効またはサポートされていない形式を使用しているため、表示しようとしているページを表示できません。圧縮。 –
さらに試してみると... gzipとしてコンテンツエンコーディングを送ると(それは収縮しています!)インターネットエクスプローラではie8を含むどのバージョンでも動作しますが、他のブラウザでは動作しません。もし私がdeflateを送ったら、正しいもの、それはie6とie7を含むどんなブラウザでも動作しますが、ie8ではありません。< –
ユーザエージェントの検出を実行するように見えます。はい、それは醜いハックですが、私の限られた経験では、ウェブ開発はそれらでいっぱいです。 –