Internet Explorer 8 + Deflate

Tengo un problema muy raro ... Realmente espero que alguien tenga una respuesta porque no sabría dónde preguntar.

Estoy escribiendo una aplicación cgi en C ++ que es ejecutada por Apache y genera código HTML. Yo mismo estoy comprimiendo la salida HTML, desde dentro de mi aplicación C ++, ya que mi servidor web no admite mod_deflate por alguna razón.

He probado esto con Firefox 2, Firefox 3, Opera 9, Opera 10, Google Chrome, Safari, IE6, IE7, IE8, incluso wget ... Funciona conCUALQUIER COSA excepto IE8.

IE8 simplemente dice "Internet Explorer no puede mostrar la página web", sin información alguna. Sé que es debido a la compresión solo porque funciona si lo inhabilito.

¿Sabes lo que estoy haciendo mal?

Uso zlib para comprimirlo, y el código exacto es:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta