은 내가 수동으로 출력 압축을 사용 그래서 같이있는 사용자 지정 HttpHandler를이 발생하면 HttpHandler를 응답에서 사라 :는 "콘텐츠 인코딩은"헤더는 예외가
context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
이 대부분의 요청에 대해 잘 작동을하지만, 때 예외가 발생하면 압축 필터가 제 위치에있는 동안 응답에서 "내용 인코딩"헤더가 사라집니다. 결과적으로 오류 페이지는 gzip으로 압축되지만 브라우저는 사실을 나타내는 헤더를받지 못합니다. 그런 다음 브라우저는 여전히 압축 된 데이터를 텍스트 (gobbledygook)로 표시하려고 시도합니다.
전체 테스트 사례 코드는 다음과 같습니다. 교대로 압축을 해제하거나 예외를 발생시키지 않도록 시도하십시오.
누군가 "콘텐츠 인코딩"헤더가 사라지는 이유에 대해 조명 해줄 수 있습니까?
마지막으로 핸들러에서 압축을 사용하도록 설정할 수 있으므로 예외가 발생하면 압축 필터가 추가되는 지점에 도달하지 않게됩니다. 그러나 내가 보았던 행동은 나로 하여금 나를 버그로 친다. 누구든지 확인할 수 있습니까?
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; }
}
}
편집 : 스크린 샷 여전히 인코딩 된 응답의 내 테스트 케이스로보고 있어요 : http://i.imgur.com/49Vcl.png
그래서 코드를있는 그대로 실행하면 아직도 압축 된 gobbledygook 대신 적절한 노란색 화면이 생깁니 까? –
예, 그대로 복사/붙여 넣기를하고 적절한 노란색 화면을 얻습니다. 내가 플러시() !!!!!!!! 때 문제가 나타납니다. 오류가 발생하기 전에 어딘가에 물을 내 보냅니 까? gzip이 나타나지 않지만 필터가 설정되지 않았습니다. – Aristos
어쩌면 다른 곳에서 사용자 정의 오류를 설정했을 수 있습니까? – Aristos