【问题标题】:internet explorer font face sslinternet explorer 字体 ssl
【发布时间】:2012-02-24 12:12:31
【问题描述】:

我网站的字体在所有使用 http 的浏览器中都可以正常工作。但是,当我更改为 https 时,字体在 IE8 及更低版本中无法正常工作,但在 ie9 中可以正常工作。

使用 IE,当我使用 http 键入 .eot 文件的路径时,我可以选择下载文件,但是当我使用 https 时,它说找不到。

我正在使用自分配证书。 iis 7.5 .net 4.0,umbraco 4.7.0 cms,客户端依赖框架(我试过去掉客户端依赖框架,还是不行)。

<style type="text/css">    
@font-face {
                font-family: 'GGX88UltraLight';
                src: url('/css/type/ggx88_ul-webfont.eot');
                src: url('/css/type/ggx88_ul-webfont.eot?iefix') format('embedded-opentype'),
                     url('/css/type/ggx88_ul-webfont.woff') format('woff'),
                     url('/css/type/ggx88_ul-webfont.ttf') format('truetype'),
                     url('/css/type/ggx88_ul-webfont.svg#webfontU6kiGgEl') format('svg');
                font-weight: normal;
                font-style: normal;
    }
</style>

可能有用的网络配置值

<staticContent>
  <!-- Set expire headers to 30 days for static content-->
  <clientCache cacheControlMode="DisableCache" cacheControlMaxAge="30.00:00:00" />
  <!-- use utf-8 encoding for anything served text/plain or text/html -->
  <remove fileExtension=".css" />
  <mimeMap fileExtension=".css" mimeType="text/css; charset=UTF-8" />
  <remove fileExtension=".js" />
  <mimeMap fileExtension=".js" mimeType="text/javascript; charset=UTF-8" />
  <remove fileExtension=".json" />
  <mimeMap fileExtension=".json" mimeType="application/json; charset=UTF-8" />
  <remove fileExtension=".rss" />
  <mimeMap fileExtension=".rss" mimeType="application/rss+xml; charset=UTF-8" />
  <remove fileExtension=".html" />
  <mimeMap fileExtension=".html" mimeType="text/html; charset=UTF-8" />
  <remove fileExtension=".xml" />
  <mimeMap fileExtension=".xml" mimeType="application/xml; charset=UTF-8" />
  <!-- HTML5 Video mime types-->
  <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
  <mimeMap fileExtension=".m4v" mimeType="video/m4v" />
  <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
  <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
  <mimeMap fileExtension=".webm" mimeType="video/webm" />
  <!-- Remove default IIS mime type for .eot which is application/octet-stream -->
  <remove fileExtension=".eot" />
  <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" /> 
  <mimeMap fileExtension=".otf" mimeType="font/otf" />
  <mimeMap fileExtension=".woff" mimeType="font/x-woff" />
  <mimeMap fileExtension=".crx" mimeType="application/x-chrome-extension" />
  <mimeMap fileExtension=".xpi" mimeType="application/x-xpinstall" />
  <mimeMap fileExtension=".safariextz" mimeType="application/octet-stream" />
</staticContent>
<httpProtocol allowKeepAlive="true">
  <customHeaders>
    <add name="X-UA-Compatible" value="IE=Edge,chrome=1" />
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
</httpProtocol>

【问题讨论】:

  • 这似乎是某种服务器配置或 Intranet 设置问题。当我将网站移到登台服务器时,字体工作正常。
  • 帮助我的是,还取消了 .htaccess 中的 Vary 参见 here

标签: css iis-7


【解决方案1】:

我在使用 spring-boot 时遇到了同样的行为: 我找到的解决方案是

- 隐藏 Pragma 和 Cache-Control 向浏览器返回标头:

Spring-boot 正在响应特定的 Cache-Control 和 Pragma HTTP 标头。

Cache-Control :"no-cache, no-store, max-age=0, must-revalidate"
Pragma :"no-cache"

Internet Explorer(在我的情况下为 IE11)无法加载带有这些标题的字体。 我相信这是一个错误,我们必须解决它。

使用 nginx 代理我们的 spring-boot 应用程序, 我可以克服这个问题, 使用以下 nginx 配置命令将该标头隐藏到浏览器:

server {
        listen 443;
        server_name server.dns.name;
        ssl on;
        ssl_certificate /etc/nginx/ssl/server.dns.name.pem;
        ssl_certificate_key /etc/nginx/ssl/server.dns.name.key;

        location / {
            include  /etc/nginx/mime.types;
            rewrite ^/(.*) /$1 break;
            proxy_pass  http://127.0.0.1:8080;
            proxy_read_timeout 90;

            #IE specific tweak for fonts not to be ignored:
            proxy_hide_header Cache-Control;
            proxy_hide_header Pragma; 
            #END IE specific tweak for fonts not to be ignored
        }
}

【讨论】:

  • 我遇到了同样的问题。在我的应用程序中,Spring Security 引入了这个问题,它默认设置这些无缓存标头。这可以通过设置 &lt;security:headers defaults-disabled="true"/&gt; 来禁用 - 这避免了必须使用反向代理并且根本无法使用缓存头。
【解决方案2】:

如果您更改 url 源的顺序会怎样。就像把“svg”网址放在第二位......就在“embedded-opentype”之后。

   @font-face {
                font-family: 'GGX88UltraLight';
                src: url('/css/type/ggx88_ul-webfont.eot');
                src: url('/css/type/ggx88_ul-webfont.eot?iefix') format('embedded-opentype'),
                     url('/css/type/ggx88_ul-webfont.svg#webfontU6kiGgEl') format('svg'),
                     url('/css/type/ggx88_ul-webfont.woff') format('woff'),
                     url('/css/type/ggx88_ul-webfont.ttf') format('truetype');
                font-weight: normal;
                font-style: normal;
    }

【讨论】:

    【解决方案3】:

    https 网站使用一些 SSL 证书。您必须如何信任这些。 有关如何手动信任的更多详细信息,请访问https://serverfault.com/questions/176242/how-to-manually-trust-an-ssl-certificate-to-a-development-server

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 2012-08-05
      • 2012-09-08
      相关资源
      最近更新 更多