无法获得iis7到gzip font-face字体文件

时间:2013-01-19 01:49:06

标签: gzip font-face mime-types

我在共享的webhost上,我只能访问iis7.5的web.config文件。 javascript文件和css文件是gzip压缩的,所以这样可行,但我认为默认情况下可以正常工作,因为在iis7.5中启用了静态压缩。但是,我无法获取字体文件以获取gzip,它们在发送时大小相同,并且响应标头没有内容编码:gzip。 谢谢你的帮助。

这是web.config文件:

<configuration>
<system.webServer>
    <directoryBrowse enabled="false" />
<staticContent>
    <mimeMap fileExtension=".otf" mimeType="font/opentype" />
</staticContent>
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
        <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
        <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="font/open-type" enabled="true" />
    <add mimeType="application/javascript" enabled="true" />
    <add mimeType="text/css" enabled="true" />
    <add mimeType="text/html" enabled="true" />
    <add mimeType="*/*" enabled="false" />
        </dynamicTypes>
    <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="font/opentype" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
    <add mimeType="*/*" enabled="false" />
        </staticTypes>
</httpCompression>
    <urlCompression dynamicCompressionBeforeCache="true" doDynamicCompression="true" doStaticCompression="true" />
    <defaultDocument>
        <files>
            <clear />
            <add value="Default.htm" />
            <add value="Default.asp" />
            <add value="index.htm" />
            <add value="index.html" />
            <add value="iisstart.htm" />
            <add value="default.aspx" />
            <add value="index.php" />
        </files>
    </defaultDocument>

</system.webServer>
</configuration>

5 个答案:

答案 0 :(得分:42)

默认情况下,IIS不包含httpCompression模块中的那些MIME类型。 您需要修改applicationHost.config文件: C:\ Windows \ System32 \ inetsrv \ config

此文件将影响您的所有网站,必须使用64位Windows中的64位文本编辑器打开。 (Notepad2 64位,记事本,不使用Notepad ++

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

            <!-- HERE -->
            <add mimeType="image/svg+xml" enabled="true" />
            <add mimeType="application/font-woff" enabled="true" />
            <add mimeType="application/x-font-ttf" enabled="true" />
            <add mimeType="application/octet-stream" enabled="true" />
            <!-- HERE -->

        </staticTypes>
        <dynamicTypes>
            <add mimeType="text/*" enabled="true" />
            <add mimeType="message/*" enabled="true" />
            <add mimeType="application/x-javascript" enabled="true" />
            <add mimeType="*/*" enabled="false" />

            <!-- HERE -->
            <add mimeType="image/svg+xml" enabled="true" />
            <add mimeType="application/font-woff" enabled="true" />
            <add mimeType="application/x-font-ttf" enabled="true" />
            <add mimeType="application/octet-stream" enabled="true" />
            <!-- HERE -->

        </dynamicTypes>
</httpCompression>

这些是我压缩 SVG WOFF EOT TTF 文件的个人设置。

然后只需在命令行中键入 iisreset 即可在IIS中重新加载配置,或重新启动计算机。

<强>更新

Woff Woff2 文件已经过压缩,因此您无需执行此操作。事实上,如果你对它们进行gzip,客户端将失去性能。

答案 1 :(得分:7)

需要注意的重要一点是,从以下设置修改 applicationHost.config (在%windir%\ system32 \ inetsrv \ config中):

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

为:

<section name="httpCompression" overrideModeDefault="Allow" />

将启用 web.config 中system.webServer标记下的httpCompression标记的配置。

答案 2 :(得分:5)

问题是默认情况下,IIS不包含可压缩的mime类型列表中的Web字体的mime类型。包含Javascript和css文件,这就是您看到它们被压缩的原因。

您的httpCompression设置可能未被使用,默认情况下会被锁定,无法在web.config中设置。请看这个页面:http://support.microsoft.com/kb/969062。在“更多信息”部分中,它说“您只能为Web服务器级别设置MIME类型。”

我能在本地服务器上运行的唯一方法是在applicationHost.config的httpCompression部分添加mime类型(这需要管理员访问权限)。在web.config中设置它们没有任何影响。

答案 3 :(得分:4)

如果你无法在所有环境中访问applicationhosts.config,那么更实用的方法就是实现一个用于压缩svg文件的httpmodule。

请参阅此帖子以获取代码示例:http://laubplusco.net/gzip-svg-files-asp-net/

答案 4 :(得分:0)

尽管通过IIS远程管理控制台启用了静态和动态压缩,但我仍然遇到此问题。

我终于设法通过将IIS上的.tff文件的MIME类型从application/octet-stream更改为font/ttf来解决了这个问题。