2

我有一个生成大量 HttpWebRequest 的程序,并且我阅读了有关使用 gzip 压缩来加速响应数据的下载的信息。我知道 gzip 是什么以及它是如何工作的,但我不知道它在 C# 中是如何工作的。

假设我有一个简单的 GET 请求:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://google.com");
request.Method = "GET";
WebResponse response = request.GetResponse();

如何使响应数据在 gzip 中压缩?如何显示压缩后的大小,然后显示未压缩的大小?

谢谢

4

2 回答 2

9

有关GZip 如何处理 Web 请求的概要,请参阅此页面。

您需要发送的特定标头是Accept-Encoding: gzip. 通常,您需要自己将其添加到请求中(通过Headers集合),但有一个快捷方式。根据这个答案,您需要做的就是添加

request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

到你的代码。

请注意,这样做您可能无法获得压缩/未压缩的大小 - 请求会在它进来时自动解压缩。但是,由于您无法提前知道服务器是否会尝试发送给您GZipped 页面,测试它不是一个有用的东西。

于 2013-09-25T14:05:37.853 回答
3

确保您在请求中声明您可以接受 gzip 的响应。因此,在您创建请求的代码之后,请执行以下操作:

request.Headers.Add("Accept-Encoding", "gzip");

如果可以的话,这将告诉服务器将其压缩后返回。

我能想到显示大小差异的唯一方法是进行 2 次调用,一次进行压缩,一次不进行压缩,然后比较返回的响应流的长度。

于 2013-09-25T14:06:32.933 回答