ASP.NET/IIS6 - 在使用动态压缩内容时禁用分块编码?

5

我在一台IIS6服务器上运行ASP.NET。目前,服务器已设置为压缩动态生成的内容,主要是为了减小检索的ASPX文件的页面大小。

其中一个ASPX文件具有以下代码段,用于从数据库中获取文件并将其发送给用户:

Response.Clear();
Response.Buffer = true;
Response.ContentType = Document.MimeType;
Response.AddHeader("content-disposition", "attachment;filename=\"" + Document.Filename + Document.Extension + "\"");
Response.AddHeader("content-length", Document.FileSizeBytes.ToString());

byte[] docBinary = Document.GetBinary();
Response.BinaryWrite(docBinary);

下载本身运行完美。然而,下载文件的人没有进度条,这非常令人恼火。
从我所做的研究来看,当IIS在压缩动态内容时将传输编码设置为分块(chunked),会删除内容长度标头,因为这违反了HTTP1.1标准。
如何在不关闭服务器级别的动态压缩的情况下解决这个问题?有没有一种通过ASP.NET编程方式关闭此响应的压缩的方法?是否有更好的方法来解决这个问题?

顺便提一下:当您提供的文件是Office 2007/2010文件时,似乎需要提供Content-Length头。http://stackoverflow.com/questions/5914675/content-length-header-ignored-by-iis-6. - Tom Hamming
1个回答

2
您可以通过修改元数据来在站点或文件夹级别上打开/关闭压缩。有关详细信息,请参见:启用HTTP压缩(IIS 6.0),然后滚动到:“为单个站点和站点元素启用HTTP压缩”。要执行此操作,您需要提升的权限(至少是管理员)。您可能需要将下载页面放置在自己的文件夹中,并在该级别上关闭压缩,以避免影响站点的其他部分。我必须承认我还没有尝试过这个,但这是我首先尝试的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接