Internet Explorer 8 + Deflate

Eu tenho um problema muito estranho .. Eu realmente espero que alguém tenha uma resposta, porque eu não sei onde mais perguntar.

Estou escrevendo um aplicativo cgi em C ++ que é executado pelo Apache e gera o código HTML. Eu estou compactando a saída HTML sozinho - de dentro do meu aplicativo C ++ - desde o meu host não suporta mod_deflate por algum motivo.

Eu testei isso com o Firefox 2, Firefox 3, Opera 9, Opera 10, Google Chrome, Safari, IE6, IE7, IE8, mesmo wget .. Ele trabalha comQUALQUER COISA exceto IE8.

O IE8 apenas diz "O Internet Explorer não pode exibir a página da Web", sem nenhuma informação. Eu sei que é por causa da compressão só porque funciona se eu desabilitá-lo.

Você sabe o que estou fazendo errado?

Eu uso o zlib para compactá-lo e o código exato é:

    /* 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;
}

questionAnswers(2)

yourAnswerToTheQuestion