【问题标题】:Why does my javascript file sometimes compressed while sometimes not?(IIS Gzip problem)为什么我的 javascript 文件有时压缩有时不压缩?(IIS Gzip 问题)
【发布时间】:2010-05-06 07:01:42
【问题描述】:

我在我的 iis 设置中为 javascript 文件启用 gzip,这是相应的配置部分。

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="10" dynamicCompressionLevel="8" />
        <dynamicTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
  <add mimeType="application/soap+msbin1" enabled="true" />
            <add mimeType="*/*" enabled="false" />
        </dynamicTypes>
        <staticTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
            <add mimeType="application/javascript" enabled="true" />
  <add mimeType="application/x-javascript" enabled="true" />
            <add mimeType="*/*" enabled="false" />
        </staticTypes>
    </httpCompression>

目前,当我下载我的 js 文件时,似乎有时服务器会返回 gzip 文件,有时则不会。我不知道为什么,以及如何调试。

如果一个文件已经被gzip压缩了,它应该被缓存在本地磁盘中,下次有人再次访问该文件时,iis内核应该直接返回缓存的gzip文件,而不是再次压缩它。对吗?

【问题讨论】:

  • 你能在两种情况下都发布请求和响应正文吗(当文件被压缩而不是压缩时)?您可以在 IE 中使用 Fiddler,在 Firefox 中使用 FireBug。
  • 嗨,artem,我是一名网络开发人员,我知道如何检查响应是否被压缩。我确定它没有压缩。幸运的是,我发现这是一个 iis 错误。我写了一篇关于这个错误的帖子。

标签: javascript iis caching compression gzip


【解决方案1】:

jaf,我自己弄清楚了,iis 中可能存在一些错误。您可以设置frequenthitthreshold 选项以强制脚本文件始终gzip 文件。 我写了一篇关于这个错误的帖子,但它是中文的,这是谷歌翻译的版本 Why gzip not work in IIS7?

【讨论】:

    【解决方案2】:

    该修复确实似乎是在 applicationHost.config 文件中的 system.webServer/serverRuntime 节点上将frequentHitThreshold 属性设置为 1。记录在http://www.iis.net/ConfigReference/system.webServer/serverRuntime

    您可以通过以管理员身份执行以下命令来做到这一点:

    %windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost
    

    一个警告 - “频繁命中”的概念似乎并不特定于压缩。不知道这样设置会不会有其他后果!

    【讨论】:

      【解决方案3】:

      清除浏览器缓存,然后重试。

      【讨论】:

      • 没有关于客户端缓存的内容。一切都与服务器有关