【问题标题】:IIS not gzipping on every requestIIS 不会对每个请求进行 gzip
【发布时间】:2013-12-30 22:14:08
【问题描述】:

我目前正在尝试研究是在项目中实施 .NET 4.5 捆绑/缩小,还是通过我们之前实施的构建脚本坚持我们的缩小。

在进行 A/B 测试时,我注意到(缩小的)脚本以不同的大小返回,并带有不同的请求。 Chrome 网络选项卡会将相同的请求报告为 1.55MB 或 455KB。将文件保存到磁盘时,Windows 始终以 1,559,907 字节显示文件。

所以我查看了标题并发现了不同之处。请求头是不变的:

GET /WebOpsDev/Scripts/scriptLibsAll.min.js?v=706.19 HTTP/1.1
Host: aburr-dev.pus.local
Connection: keep-alive
Cache-Control: no-cache
Accept: */*
Pragma: no-cache
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Referer: http://aburr-dev.pus.local/WebOpsDev/Account/LogOn
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: Username=webteam

但响应头不同,具体是“Content-Encoding”头:

HTTP/1.1 200 OK
Cache-Control: max-age=31536000
Content-Type: application/x-javascript
Last-Modified: Mon, 30 Dec 2013 21:38:42 GMT
Accept-Ranges: bytes
ETag: "99439982a75cf1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon, 30 Dec 2013 21:43:44 GMT
Content-Length: 1559907

HTTP/1.1 200 OK
Cache-Control: max-age=31536000
Content-Type: application/x-javascript
Content-Encoding: gzip
Last-Modified: Mon, 30 Dec 2013 21:38:42 GMT
Accept-Ranges: bytes
ETag: "0dd4082a75cf1:0"
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon, 30 Dec 2013 21:42:46 GMT
Content-Length: 463804

我的问题是,为什么 gzip 只应用于某些请求而不是全部?为了在每个请求上应用 gzip 需要改变什么?还有它对 XHR 有什么影响?

【问题讨论】:

  • 您使用哪些浏览器发出无法传递压缩响应的请求?您的某些用户代理可能是无法解压缩 gzip 内容或 IIS 无法识别为能够解压缩压缩内容的浏览器。
  • 嗨@Jerreck,我正在使用 Chrome 并通过“网络”选项卡查看流量。

标签: javascript .net iis gzip


【解决方案1】:

感谢响应者,但事实证明 IIS 不会对每个请求进行 GZIP。为了获得准确的测试,我必须关闭静态内容压缩,与此处描述的相反: http://technet.microsoft.com/en-us/library/cc754668(v=ws.10).aspx

【讨论】:

    【解决方案2】:

    确保在 IIS 中同时安装了静态和动态压缩

    确保您的文件位于 C:\Windows\System32\inetsrv\config\applicationHost.config

    找到该部分

    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" minFileSizeForComp="2000">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="9" />
    <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
    </dynamicTypes>
    <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
    </staticTypes>
    </httpCompression>
    

    此外,在您的项目中,请确保您使用以获得最佳捆绑 http://www.nuget.org/packages/microsoft.aspnet.web.optimization/https://www.nuget.org/packages/WebGrease

    使用fiddler检查每个请求是否被正确压缩http://fiddler2.com/

    【讨论】:

    • 嗨@Marko,感谢您的回复。我试图弄清楚如何强制 IIS 对每个请求进行 GZIP,因为事实证明这并不可行。至于网络优化库的推荐,我正在测试以查看我们当前的(自定义)缩小系统是否更有效/更不有效。
    猜你喜欢
    • 2011-01-22
    • 2010-12-20
    • 1970-01-01
    • 2016-02-08
    • 2016-12-25
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多