在Firebug中,请求头具有以下条目:
Accept-Encoding: gzip, deflate
但是在响应头中却没有:
Content-Encoding: gzip
尽管我尝试了许多Stack Overflow和其他网站上的答案,但似乎没有任何方法可以解决问题!无论是静态文件还是动态文件都没有被压缩,或者至少如果它们被压缩了,响应头中也没有回传gzip值的内容编码。
这是我的web.config设置示例:
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true" />
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="150" staticCompressionIgnoreHitFrequency="true">
<remove name="gzip" />
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="8" dynamicCompressionLevel="8" />
</httpCompression>
我忽略了命中频率:staticCompressionIgnoreHitFrequency="true"
我确认IIS实际上压缩了文件,我可以在这里看到:C:\inetpub\temp\IIS Temporary Compressed Files
如此指定:set up gzip in IIS 8 windows 8,我确保了Windows功能中启用了静态和动态压缩:Internet Information Services> WWW服务>性能特征
我还尝试了这位用户的方法:IIS 7.5 Compression creates compressed file but returns the non-compressed one
编辑1:
IIS版本为10,但我也在IIS 8.5上尝试过。
编辑2:
我现在也尝试了在此链接中找到的各种配置文件:https://github.com/h5bp/server-configs-iis/,这些文件提供了一些“最佳实践”web.config文件。
未解决
编辑3:
根据@Nkosi的建议,我创建了一个全新的Asp.net MVC应用程序,并使用我尝试过的所有选项进行了配置。
以下是我从Fiddler中得到的原始标头:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: text/javascript; charset=UTF-8
Expires: Wed, 20 Jul 2016 18:22:47 GMT
Last-Modified: Wed, 20 Jul 2016 18:22:47 GMT
Server: Microsoft-HTTPAPI/2.0
Date: Wed, 20 Jul 2016 18:22:47 GMT
正如您所看到的,没有 Content-Encoding: Gzip
未解决
编辑4:
我尝试了在 Global.asax 部分的 BeginRequest 事件中添加代码的方法:https://dev59.com/W18e5IYBdhLWcg3wlbTx#27185575
未解决
编辑5:
因此,我刚刚根据 SO 上的这个答案尝试启用跟踪:https://dev59.com/zlwX5IYBdhLWcg3w-Tlv#33182525
没有失败,但我注意到在跟踪文件的底部有一个名为 GENERAL_RESPONSE_HEADERS 的部分,下面是它提供的内容:
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-Powered-By: My Little Pony
X-UA-Compatible: IE=Edge,chrome=1
这适用于每个静态类型文件。
然而,我在跟踪文件中找到了以下内容:
8. STATIC_COMPRESSION_START 08:04:03.552
9. STATIC_COMPRESSION_NOT_SUCCESS Reason="NOT_FREQUENTLY_HIT" 08:04:03.552
10. STATIC_COMPRESSION_END 08:04:03.552
由于访问频率不高,压缩未成功...这很奇怪,因为我明确将忽略命中频率选项设置为true!
所以我进入了IIS管理器,并在服务器上将忽略命中频率设置为true(即applicationHost.config),这将更改跟踪文件输出如下:
8. STATIC_COMPRESSION_START 08:19:17.489
9. STATIC_COMPRESSION_SUCCESS 08:19:17.489
10. STATIC_COMPRESSION_END 08:19:17.489
我回去将applicationHost.config中的设置关闭,结果返回到“Static Compression Not Success”,这肯定是有区别的。然而当我看FireBug时,它仍然传递未压缩的文件,没有GZIP Content Encoding响应头。
我在Failed Request Trace中注意到的另一个有趣的细节是,最后两个条目GENERAL_FLUSH_RESPONSE_END和GENERAL_REQUEST_END都显示我的Bootstrap.css文件已发送17903字节,大约18kb,与我在IIS临时压缩文件夹中看到的压缩版本的文件相匹配。所以文件实际上被压缩了,而且根据失败请求跟踪记录,它正在发送正确的内容......但是浏览器选择了完整的117kb文件?
未解决
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="false" />
。当我从浏览器(Firefox、IE11、Edge、Google Chrome)发送测试请求到一个简单的MVC应用程序时,所有请求都带有Accept-Encoding: gzip, deflate
,响应返回Content-Encoding:gzip
。 - Nkosi