我有习惯HttpHandler,我以人工方式使产出压缩。
context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
对大多数请求来说,这项工作是很明智的,但在遇到例外情况时,“自动编码”头盔从反应中消失,而压缩过滤器仍然有效。 结果是,错误的页数压缩,但浏览器没有显示这一事实的头脑。 然后,浏览器试图将仍然压缩的数据作为文本,即gobbledygook 。
完整的测试个案代码如下所示。 另一种做法是打消压缩,或者不放弃例外。
谁能说明为什么出现“自发-冷藏”头盔?
我认为,我可以简单地把压缩作为“last的”手法,这样,如果遇到例外情况,就永远不会达到添加压缩过滤器的点;但我看到的行为是 b。 谁能证实?
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))
{
return;
}
// gzip or wildcard
if (acceptEncoding.ToLower().Contains("gzip") || acceptEncoding.Contains("*"))
{
context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
return;
}
// Also handles deflate (not shown here)
// <snip>
}
public bool IsReusable
{
get { return true; }
}
}
EDIT: Screenshot of the still-encoded response I m see with my test case: https://i.stack.imgur.com/R3Wmq.png