在 Windows 上,我尝试在我的开发环境中临时启用内容压缩以粗略了解我的应用程序中页面的总有效负载时遇到了这种行为。
我可以确认 ESET NOD32 Antivirus 确实按照@bugs_ 在他对这个问题的回答中描述的方式运行,并且我还可以确认运行 Fiddler4 具有相同的效果。但是,关闭 Fiddler 和禁用 NOD32 的 HTTP 扫描都不能解决问题,为此,我必须在连接器中禁用“sendfile”,如下所示:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
compression="on" compressionMinSize="8192" useSendfile="false"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
redirectPort="8443" />
这里的重要属性是useSendfile="false"
我在 Windows 下使用 Apache Tomcat 8。Tomcat 文档 ( http://tomcat.apache.org/tomcat-8.0-doc/config/http.html ) 对以下内容进行了说明useSendfile
:
使用此属性来启用或禁用 sendfile 功能。默认值是true。请注意,使用 sendfile 将禁用 Tomcat 可能对响应执行的任何压缩。
这关于compression
:
在使用压缩(节省带宽)和使用 sendfile 功能(节省 CPU 周期)之间需要权衡。如果连接器支持 sendfile 功能,例如 NIO 连接器,则使用 sendfile 将优先于压缩。症状是大于 48 Kb 的静态文件将在未压缩的情况下发送。您可以通过设置连接器的 useSendfile 属性来关闭 sendfile,如下所述,或者在默认 conf/web.xml 或 Web 应用程序的 web.xml 中的 DefaultServlet 配置中更改 sendfile 使用阈值。