我正在尝试在 web.config 文件中配置 IIS7 压缩设置。我正在尝试启用 HTTP 1.0 请求以进行 gzip 压缩。
MSDN 有所有信息关于这里。
是否可以在我自己网站的 web.config 文件中包含此配置信息?还是我需要在应用程序级别进行设置?目前,我的 web.config 中有该代码...
<system.webServer>
<urlCompression
doDynamicCompression="true"
dynamicCompressionBeforeCache="true" />
<httpCompression
cacheControlHeader="max-age=86400"
noCompressionForHttp10="False"
noCompressionForProxies="False"
sendCacheHeaders="true" />
... other stuff snipped ...
</system.webServer>
它不工作:( HTTP 1.1 请求被压缩,但 1.0 没有。
上面的 MSDN 页面说它可以用于:-
- 机器配置
- 应用程序主机配置
- 根应用程序 Web.config
- 应用程序 Web.config
- 目录 Web.config
那么,我们可以在 web.config 文件中以编程方式为每个网站设置这些设置吗?(这是一个应用程序 Web.config 文件...)我做错了什么?
欢呼:)
编辑:有人问我如何知道 HTTP1.0 没有被压缩。我正在使用失败请求跟踪规则,它会报告:-
DYNAMIC_COMPRESSION_START
DYNAMIC_COMPRESSION_NOT_SUCESS
Reason: 3
Reason: NO_COMPRESSION_10
DYNAMIC_COMPRESSION_END
答案1
请密切注意 IIS 7.x web.config 设置的
noCompressionForProxies="false"
在 web.config 级别不受支持。必须在 C:\Windows\System32\inetsrv\config\ApplicationHost.config 中设置,如下所示:
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForProxies="False">
更改设置后,请务必执行 IIS 重置。
如果客户端的 Web 请求具有 HTTP“Via”标头,则 IIS 会确定该请求来自代理,如下所示:
Via: 1.1 foo
答案2
经过一番研究,它在应用程序级别默认处于“锁定”状态。因此,需要将其“解锁”。这可以通过命令行或通过(额外下载)iis7 管理工具来实现。
例如。appcmd set config -section:urlCompression /doDynamicCompression:true
参考文献:
答案3
您如何测试 HTTP1.0 请求是否未被压缩?可能是您使用的客户端没有告诉服务器它可以接受压缩响应?
如果你可以看到客户端发送的标头(由测试客户端本身呈现,如果你在 Firefox 中测试,则使用 Firebug 或类似工具;如果你在 IE 中测试,则使用 IEHTTPHeaders;或者通过使用外部工具嗅探流量),你应该会看到类似
Accept-Encoding: compress, gzip, deflate
在那里某处。如果客户端没有通知服务器它可以接受压缩响应,那么无论服务器端的其他设置如何,服务器都不会发送压缩响应。
另一个问题可能是,如果您通过代理服务器进行测试,而代理服务器本身就是代理服务器。在这种情况下,noCompressionForProxies 设置可能会优先并阻止压缩响应的可能性。
需要注意的一点是,某些发送 HTTP1.0 请求的客户端和代理(通常是较旧的软件)在收到压缩响应时无法正确处理,因此如果您确实启用了对 HTTP1.0 请求的响应的压缩,请确保在您预计访问者/用户使用的所有客户端/代理软件中测试您的网站/应用程序。如果您可以保证目标受众将使用某些软件(例如,如果该应用程序仅适用于内部公司网络),那么这个问题就不大,但除此之外,还有很多组合需要测试,这就是为什么大多数服务器完全禁用 1.0 请求的压缩的原因。