【问题标题】:http compression on windows phone 7 http stackWindows Phone 7 http堆栈上的http压缩
【发布时间】:2011-01-11 18:14:32
【问题描述】:

我在最终的 WP7 平台发布之前提出了这个问题,但从未收到团队的明确答复 - WP7 中的 http 堆栈似乎不支持压缩。我发现这一点的方法是在运行模拟器时使用提琴手 - 当我请求在 Silverlight3/4 接收时压缩的 ODATA 提要时 - 在 WP7 应用程序接收时未压缩。

是否有人确认 WP7 上的 Silverlight HTTP 堆栈不支持/不支持 http 压缩?

谢谢 迈克尔

【问题讨论】:

  • 如何指定您可以接收压缩内容? (您在 HttpWebRequest 中设置了哪些标头?)
  • 收到时没有压缩?这意味着什么? sender 必须对其进行压缩,因此这对我来说意味着您认为在 WP7 上设置的任何标头要么不正确,要么被 http 堆栈剥离。
  • 我没有手动构建请求 - 我正在使用 ODATA WP7 客户端 - 在桌面版本上 - 请求发送适当的标头以请求压缩内容 - 不确定为什么 WP7 版本不运行同样的方式

标签: windows-phone-7 odata http-compression


【解决方案1】:

在回复我的question on twitter“你知道 REST 服务是否可以支持 gzip 编码吗?”,Joe Marini(微软 Windows Phone 网络平台首席项目经理)replied“是的,gzip 是支持。”

更长的答案是支持压缩的 HTTP 内容,但您不能更改 HTTP 请求中的 Accept-Encoding 标头以请求压缩响应。但是,如果响应被压缩,那么您可以接收、解压缩和处理该响应。

我目前正在开发一个恰好存在这个问题的 WP7 应用程序,我们已经通过使用不同的标头来请求压缩响应 (X-Accept-Encoding) 来解决这个问题,但这需要服务器理解这个自定义标题。

您可能会发现Hammock library 很有用;我认为它通过 X-Accept-Encoding 支持 GZIP 压缩。

【讨论】:

  • 我认为这将要求我直接向 ODATA 服务发出请求 - 阻止我使用 WP7 DataServicesClient - 它为 ODATA 提要提供请求和响应处理。我将查看 DataServiceClient 以查看在将请求发送到 WCF 数据服务之前是否有任何方法可以获取对请求的引用。
  • 我希望能够做到这一点: void entity_SendingRequest(object sender, SendingRequestEventArgs e) { e.Headers.Add("Accept-Encoding", "gzip"); } 但 headers 集合是只读的
  • 如果 WP7 的 ODATA 客户端库不允许您自定义请求的标头,那么很遗憾,您将无法请求压缩响应。我相信 WP7 ODATA 客户端仍处于相对起步阶段,因此您始终可以将其作为新功能来请求。也就是说,您确定您确实需要压缩响应吗?有这么多数据吗?
  • 通过减少随初始请求下载的属性数量,我能够将原始有效负载从 450KB 减少到 70KB - 它相当快。当我修改请求标头(在 fiddler 中手动)以包含 Accept-Encoding gzip 时 - 它减少到大约 8KB - 只是试图尽可能优化 - 但我可以忍受 70KB。
猜你喜欢
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多