【发布时间】:2012-07-21 23:55:02
【问题描述】:
所以我试图让我的应用使用动态压缩和 gzip 发送其 JSON 响应。不幸的是,这不起作用。服务器上的所有静态压缩都工作正常,但不是动态的。
我已经通过添加:
<add mimeType="application/json" enabled="true" />
<add mimeType="application/json; charset=utf-8" enabled="true" />
到 applicationHost.config 文件中 <httpCompression> 的 <dynamicTypes> 部分。我正在使用 Charles 来检查 HTTP 请求,并且可以验证我正在发送带有 Accept-Encoding: gzip, deflate 标头集的请求。我试过Accept: */* 和Accept: application/json。当它不起作用时,我启用了“失败的请求”跟踪日志来查找 DYNAMIC_COMPRESSION_NOT_SUCCESS 的错误代码,即 NO_MATCHING_CONTENT_TYPE。
我一直在尝试在论坛和 Google 上进行研究,但我所看到的只是人们说使用带有指定字符集的 mimeType 可以解决他们的问题,但在我的情况下它仍然无法正常工作,我可以验证响应返回一个标题为Content-Type: application/json; charset=utf-8
提供 JSON 响应的端点是标准的 .NET ASMX WebServices,在类上用 [ScriptService()] 注释,在方法上用 [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 注释。他们返回 JSON 很好,但我无法让动态压缩为我的生活工作。
由于这些也是常规的网络方法,我还添加了:
<add mimeType="text/xml" enabled="true" />
<add mimeType="text/xml; charset=utf-8" enabled="true" />
尝试对 XML 响应进行 gzip 压缩。令人沮丧的是,这种压缩有效,而从同一方法发送 JSON 则无效。在这一点上,我有点不知所措。
【问题讨论】:
标签: .net json iis-7 http-compression