【问题标题】:RestSharp compress request while making rest call to serverRestSharp在对服务器进行休息调用时压缩请求
【发布时间】:2012-06-06 21:45:03
【问题描述】:

我在我的 C# 客户端中使用了一个用 java 编写的 rest api。我正在向服务器发送大量数据,并且我正在使用 RestSharp.dll 进行休息调用。我要做的是构造一个对象并将其直接添加到 RestSharp 请求对象的主体中,并为其提及 .netserializer。所以它会自动序列化并发布。一切都很好。

现在我需要应用 LZO 或 GZIP 压缩。这样服务器的负载就会减少。

我知道如何实现这两种压缩技术。但是如何用 RestSharp 请求对象来实现呢?

我要做什么。我正在向请求正文添加对象。何时执行压缩?

任何帮助...

谢谢

【问题讨论】:

  • 为什么要实现它? HTTP 压缩通常由服务器和客户端处理。你不需要自己实现它。 HTTP 压缩是 IIS 的一项功能,可以在客户端使用 HttpWebRequest.AutomaticDecompression 属性进行控制
  • 我正在使用 RestSharp。我发送的数据是巨大的。所以我什至有时会做 2X 压缩。
  • 我认为我们必须设置该属性。它不是自动的。无论如何,在我的情况下,正常压缩不会奏效。我必须使用 Gzip 或 LZO 对其进行压缩。

标签: .net rest restsharp


【解决方案1】:

RestSharp supports HTTP compression 从 102.7 版开始。我不确定这是否仅适用于 Windows Phone 或所有平台都支持压缩。

最常见的算法是 GZip 和 Deflate,尽管实际的压缩级别通常由服务器控制。

更新:

我刚刚使用Fiddler 验证了在 103.1 中默认启用 HTTP 压缩。以下代码返回使用 GZip 编码的页面:

        var target = "http://msdn.microsoft.com/";
        var client=new RestClient(target);
        var request = new RestRequest("",Method.GET);
        var response = client.Execute(request);
        Console.WriteLine(response.Content);

无需添加 Accept-Encoding 标头。

压缩只有在服务器支持的情况下才会起作用。否则响应将被解压缩。

这意味着 Java 服务也必须启用 HTTP 压缩。

如果响应被压缩,Content-Encoding 标头将被设置为压缩方法,例如。 压缩包

要直观地检查这一点,请打开 Fiddler 并检查对 RestRequest 的响应。 Response 窗格的 Transformer 选项卡显示压缩设置。

【讨论】:

  • ok...如果我们在请求对象中添加这个 request.AddHeader("Accept-Encoding", "gzip") 并发布到服务器,它实际上会使用 GZip 压缩对象。好的,阅读您的链接后,我认为它确实可以压缩它。
  • 在将其添加为标题后,我已成功启用它及其发布数据。但是现在我如何验证它是否真的在压缩东西并发布到服务器。
  • 老问题,但我觉得这个答案只是断言 RestSharp 支持自动 接收 gzipped 编码。这个问题绝对是关于 sending gzipped 编码数据(自动)。我可以确认,即使我将 "Content-Encoding", "gzip" 标头添加到我的 request 对象,RestSharp 也会忽略它并将请求正文编码为 UTF8。在发送大型请求体时,如果它可以根据请求自动将序列化数据压缩为“gzip”,那就太好了。这个功能是否隐藏在 RestSharp 中的任何地方?
  • @Alain HTTP 仅支持压缩的响应。我认为压缩请求是 HTTP/2 的一部分。没有库可以提供协议中不可用的内容。
  • 我不知道!谢谢提供信息。因此,如果我们的 API 需要从用户那里传输大量数据,以至于需要进行请求压缩,那么各方大概应该自己实现它吧?在您看来,将“Content-Type”设置为“application/json”并将“Content-Encoding”设置为“gzip”(然后我们自己编码)是最正确的做法 - 或者我们应该设置将“Content-Type”本身改为“application/gzip”以避免干扰? (或其他一些标题,如“Transfer-Encoding”)?
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
相关资源
最近更新 更多