Tôi có một tùy chỉnh HttpHandler trong đó tôi tự cho phép nén đầu ra, như vậy:"Content-mã hóa" tiêu đề biến mất khỏi HttpHandler phản ứng nếu một ngoại lệ xảy ra
context.Response.AppendHeader("Content-encoding", "gzip");
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
này hoạt động độc đáo đối với hầu hết các yêu cầu, nhưng khi một ngoại lệ gặp phải tiêu đề "Mã hóa nội dung" biến mất khỏi phản hồi, trong khi bộ lọc nén vẫn giữ nguyên. Kết quả là trang lỗi là gzip được nén, nhưng trình duyệt không nhận được tiêu đề cho biết thực tế đó. Sau đó trình duyệt sẽ cố gắng hiển thị dữ liệu vẫn được nén dưới dạng văn bản, là gobbledygook.
Mã trường hợp thử nghiệm đầy đủ được hiển thị bên dưới. Thử luân phiên tắt tính năng nén hoặc không loại trừ ngoại lệ.
Có ai có thể giải thích một chút về nguyên nhân khiến tiêu đề "Mã hóa nội dung" biến mất không?
Tôi cho rằng tôi có thể đơn giản cho phép nén dưới dạng điều cuối cùng mà trình xử lý thực hiện, để nếu ngoại lệ gặp phải, nó không bao giờ đạt đến điểm mà bộ lọc nén được thêm vào; nhưng hành vi mà tôi thấy đang gây cho tôi một lỗi. Có ai xác nhận không?
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: Ảnh chụp màn hình của phản ứng vẫn mã hóa tôi nhìn thấy với trường hợp thử nghiệm của tôi: http://i.imgur.com/49Vcl.png
Vì vậy, nếu bạn thực thi mã của tôi, bạn sẽ nhận được một màn hình màu xám chết, chứ không phải là gobbledygook thích hợp? –
vâng, như-là, tôi tạo bản sao/dán và tôi nhận được một màn hình màu vàng-of-death thích hợp. Vấn đề xuất hiện khi tôi tuôn ra() !!!!!!!! Bạn có tuôn ra ở đâu đó trước lỗi không? Gzip không xuất hiện, nhưng bộ lọc cũng không được đặt. – Aristos
Có thể một nơi khác bạn đã đặt lỗi tùy chỉnh? – Aristos