Tag: http compression

如果发生exception,“Content-encoding”标头将从HttpHandler响应中消失

我有一个自定义的HttpHandler,我在其中手动启用输出压缩,如下所示: context.Response.AppendHeader(“Content-encoding”, “gzip”); context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress); 这适用于大多数请求,但遇到exception时,“内容编码”标头会从响应中消失,而压缩filter仍保留在原位。 结果是错误页面被gzip压缩,但是浏览器没有收到表示该事实的标题。 然后浏览器尝试将仍然压缩的数据显示为文本,即gobbledygook 。 完整的测试用例代码如下所示。 尝试交替禁用压缩或不抛出exception。 有人可以解释为什么“内容编码”标题消失了吗? 我想我可以简单地启用压缩作为处理程序的最后一件事,因此如果遇到exception,它永远不会到达添加压缩filter的点; 但我看到的行为让我感到害怕。 谁能确认一下? public class TestHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { CompressResponse(context); context.Response.Write(“Hello world”); // Throw an exception for testing purposes throw new Exception(“Just testing…”); } private void CompressResponse(HttpContext context) { string acceptEncoding = context.Request.Headers[“Accept-Encoding”]; if (String.IsNullOrEmpty(acceptEncoding)) […]