强制编码一个服务?

时间:2016-06-21 21:16:15

标签: servicestack gzip

我正在尝试实现通过Outlook客户端链接的RSS源。除了我的开发机器之外,Feed适用于每台机器。当查看从服务返回的结果时,显然我的机器正在通过gzip获取返回编码的数据,并且Outlook客户端看起来不够智能解压缩。有什么办法可以检查服务中的请求标头,并确保永远不会压缩此特定服务输出吗?

注意:我没有使用缓存或曾经调用.ToCompressedResult。我的服务使用XMLWriter生成xml并将该xml作为字符串返回。我也在服务上有[AddHeader(ContentType = MimeTypes.XmlText)]。所以我甚至不确定为什么结果会被压缩。

不起作用的客户

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ServiceStack/4.056 Win32NT/.NET
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 21 Jun 2016 20:57:39 GMT
Content-Length: 539

有效的客户

 HTTP/1.1 200 OK
    Cache-Control: private
    Content-Type: text/xml; charset=utf-8
    Vary: Accept
    Server: Microsoft-IIS/7.5
    X-Powered-By: ServiceStack/4.056 Win32NT/.NET
    X-AspNet-Version: 4.0.30319
    Set-Cookie: ss-id=YVha5gBKFgrsMLJiOFDs; path=/; HttpOnly
    Set-Cookie: ss-pid=WQBwbdU2txHLhgZLbRwR; expires=Sat, 21-Jun-2036 19:45:41 GMT; path=/; HttpOnly
    X-Powered-By: ASP.NET
    Date: Tue, 21 Jun 2016 19:45:41 GMT
    Content-Length: 1456

1 个答案:

答案 0 :(得分:2)

如果您没有使用缓存,那么SerivceStack不会进行压缩,因此必须由IIS / ASP.NET完成,您应该可以在Web.config中禁用它:

<system.webServer>
  <urlCompression doStaticCompression="false" doDynamicCompression="false"/>
</system.webServer>

顺便提一下,客户端要求压缩响应的方式是使用Accept-Encoding HTTP请求标头,例如:

Accept-Encoding:gzip, deflate

如果客户端不包含Accept-Encoding,则服务器不应返回压缩结果。