HTTP响应GZip压缩

时间:2012-09-27 07:01:46

标签: c# http gzip tcpclient

我有一个处理HTTP请求的代理。

现在,当我收到GZipped HTTP响应时,我正在解压缩它:

MemoryStream ms = new MemoryStream();

if (response.ContentLength > 0)
  buffer = new Byte[response.ContentLength];
else
  buffer = new Byte[BUFFER_SIZE];

int bytesRead;
while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
  ms.Write(buffer, 0, bytesRead);
}

string resp = "";
if (response.ContentEncoding == "gzip")
  resp = Utilities.GZip.Unzip(ms.ToArray());
else
  resp = Encoding.UTF8.GetString(ms.ToArray());

Utilities.GZip.Unzip在哪里:

using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
  using (var gs = new GZipStream(msi, CompressionMode.Decompress))
  {
    CopyTo(gs, mso);
  }
  return Encoding.UTF8.GetString(mso.ToArray());
}

到目前为止一切都很好,我可以阅读HTML。

现在我必须将响应写回请求它的客户。

像这样:

byte[] outByte;
if (response.ContentEncoding == "gzip")
  outByte = Utilities.GZip.Zip(resp);
else
  outByte = Encoding.UTF8.GetBytes(resp);
outStream.Write(outByte, 0, outByte.Length);

Utilities.GZip.Zip在哪里:

var bytes = Encoding.UTF8.GetBytes(str);
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
  using (var gs = new GZipStream(mso, CompressionMode.Compress))
  {
    CopyTo(msi, gs);
  }
  return mso.ToArray();
}

现在这是一个非常奇怪的行为,响应字节数组的长度为16990(压缩),但我自己的压缩字节数组的长度为19379。

客户得到回复,但它被切断了。

有什么建议吗?

修改

为了您的信息,我将原始的MemoryStream不变地发送给客户端,一切都很好!

0 个答案:

没有答案