C# HttpListener 响应 + GZipStream

标签 c# encoding gzip httplistener gzipstream

我将 HttpListener 用于我自己的 http 服务器(我不使用 IIS)。我想通过 GZip 压缩来压缩我的 OutputStream:

byte[] refBuffer = Encoding.UTF8.GetBytes(...some data source...);

var varByteStream = new MemoryStream(refBuffer);

System.IO.Compression.GZipStream refGZipStream = new GZipStream(varByteStream, CompressionMode.Compress, false);

refGZipStream.BaseStream.CopyTo(refHttpListenerContext.Response.OutputStream);

refHttpListenerContext.Response.AddHeader("Content-Encoding", "gzip");

但我在 Chrome 中遇到错误:

ERR_CONTENT_DECODING_FAILED

如果我删除 AddHeader,它就可以工作,但响应的大小似乎没有被压缩。我做错了什么?

最佳答案

问题是您的传输方向错误。您要做的是将 GZipStream 附加到 Response.OutputStream,然后在 MemoryStream 上调用 CopyTo,传入 GZipStream,如下所示:

refHttpListenerContext.Response.AddHeader("Content-Encoding", "gzip"); 

byte[] refBuffer = Encoding.UTF8.GetBytes(...some data source...); 

var varByteStream = new MemoryStream(refBuffer); 

System.IO.Compression.GZipStream refGZipStream = new GZipStream(refHttpListenerContext.Response.OutputStream, CompressionMode.Compress, false); 

varByteStream.CopyTo(refGZipStream); 
refGZipStream.Flush();

关于C# HttpListener 响应 + GZipStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438217/

相关文章:

asp.net-web-api - Web Api gzip 压缩

c# - 返回 HttpResponseMessage 时的 WebAPI Gzip

python - Bottle/Python - 尝试解压缩请求正文时出现 "IOError: [Errno 9] read() on write-only GzipFile object"

c# - 如何创建单个 Web 应用程序作为许多公司的子域

c# - 如果不调试,Linq to Entity Framework 返回值会导致错误

java - 分两步编码字符串(先编码为 ISO-8859-1,然后编码为 UTF-8)

java - 编码 Cp1252 在 XML 文件中是否无效?

c# - WebClient.DownloadString 结果与浏览器结果不匹配

c# - 如何在部分页面中设置动态 Controller 名称

c# - 使用 Selenium Webdriver 处理 Windows 身份验证