我遇到JSON响应压缩问题。在将网站上传到生产服务器(Windows 2008,IIS 7)后,我会查看响应标头,并找到未压缩的响应。在IIS控制面板中启用“启用静态压缩”和“启用动态压缩”不起作用.ASPX页面响应gzip,但webservice响应未压缩。
我看了谷歌,但没有找到关于这个麻烦的答案。此外,我尝试这种json ihttpmodule compression方式(并添加到web.config这个模块) - 但是这个源非常适合在开发机器上使用ASP.NET开发服务器(并且减少了七倍的响应大小)并完全忽略了IIS7。
如何将gzip压缩应用于我的webservice的json响应?感谢。
PS .NET 3.5
答案 0 :(得分:3)
我偶然发现了与JsonCompressionModule相同的问题。它在开发服务器上工作但在IIS 7上没有工作。我发现在IIS 7下,仅在system.web下添加句柄是不够的,但在system.webServer下也是如此(见下文)。在此更改后,它在IIS 7上正常工作。
<system.web>
<httpModules>
<add name="JsonCompressionModule" type="JsonCompressionModule"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="JsonCompressionModule" preCondition="managedHandler" type="JsonCompressionModule"/>
</modules>
</system.webServer>
答案 1 :(得分:2)
IIS动态压缩使用响应内容类型标头来确定它是否应该压缩内容。默认设置不压缩“application / json”。您可以在http://www.iis.net/configreference/system.webserver/httpcompression
找到更多信息要添加它,请打开管理命令提示符,运行以下命令,然后重新启动IIS服务。
cd \Windows\System32\inetsrv
appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
您可能想要添加一些其他内容类型。默认动态设置压缩的唯一应用程序/ *类型是application / x-javascript。
答案 2 :(得分:0)
请尝试检查客户端发送的请求标头。 Accept-Encoding应具有gzip或deflate值。 确保客户端能够解压缩JSON。 有一种解决方案能够设置Accept-Encoding并一起执行GZIP压缩 - Helicon Ape(http://www.helicontech.com/ape/)。以下配置将执行两个技巧:
# Manually set required request header
RequestHeader append Accept-Encoding gzip early
# Enable high-level (9) comression for JSON files
SetEnvIf mime application/json gzip=9