【发布时间】:2014-11-09 13:31:52
【问题描述】:
我有一个应用程序使用 FontAwesome 的字形字体作为图标,当我从服务器托管文件时一切正常。当我在我的网站上启用 CDN 支持时,IE 11 在字体文件方面表现得相当奇怪。当通过单击链接或手动输入 URL 导航到页面时,字体文件加载正常约 95% 的时间。如果我重新加载页面或使用前进/后退按钮(或大约 5% 的时间正常页面加载不起作用),IE 11 会加载第一个字体文件,以某种方式丢失/丢弃/忽略响应正文的内容,尝试加载第二个文件,丢失响应正文的内容,清洗-冲洗-重复,我最终没有字体字形。所有其他浏览器(包括旧版本的 IE)都可以正常工作。
@font-face CSS 中的声明:
@font-face {
font-family: 'FontAwesome';
src: url('/common/fonts/fontawesome-webfont.eot');
src: url('/common/fonts/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
url('/common/fonts/fontawesome-webfont.woff') format('woff'),
url('/common/fonts/fontawesome-webfont.ttf') format('truetype'),
url('/common/fonts/fontawesome-webfont.svg#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
正常页面加载:
总结:
URL Protocol Method Result Type Received Taken Initiator Wait Start Request Response Cache read Gap
/common/fonts/fontawesome-webfont.eot HTTPS GET 200 application/octet-stream 99.78 KB 109 ms @font-face 2449 0 47 62 0 1420
响应头:
Key Value
Response HTTP/1.1 200 OK
Content-Type application/octet-stream
Last-Modified Mon, 04 Aug 2014 12:49:48 GMT
Accept-Ranges bytes
ETag "07ef492e2afcf1:0"
Server Microsoft-IIS/7.5
P3P CP="NON DSP COR ADM DEV PSA IVA CONi TELi OUR BUS NAV"
Access-Control-Allow-Origin *
Content-Length 101712
Expires Mon, 15 Sep 2014 18:48:40 GMT
Cache-Control max-age=0, no-cache, no-store
Pragma no-cache
Date Mon, 15 Sep 2014 18:48:40 GMT
Connection keep-alive
响应正文包含字体文件。
页面重新加载:
总结:
URL Protocol Method Result Type Received Taken Initiator Wait Start Request Response Cache read Gap
/common/fonts/fontawesome-webfont.eot HTTPS GET 200 application/octet-stream 462 B 47 ms @font-face 983 0 47 0 0 1248
/common/fonts/fontawesome-webfont.woff HTTPS GET 200 application/x-font-woff 461 B 63 ms @font-face 1092 0 63 0 0 1123
/common/fonts/fontawesome-webfont.ttf HTTPS GET 200 application/octet-stream 462 B 93 ms @font-face 1155 15 78 0 0 1030
响应头(对于“fontawesome-webfont.eot”,其他看起来一样,除了内容长度不同,考虑到文件大小的差异):
Key Value
Response HTTP/1.1 200 OK
Content-Type application/octet-stream
Last-Modified Mon, 04 Aug 2014 12:49:48 GMT
Accept-Ranges bytes
ETag "07ef492e2afcf1:0"
Server Microsoft-IIS/7.5
P3P CP="NON DSP COR ADM DEV PSA IVA CONi TELi OUR BUS NAV"
Access-Control-Allow-Origin *
Content-Length 101712
Expires Mon, 15 Sep 2014 19:05:13 GMT
Cache-Control max-age=0, no-cache, no-store
Pragma no-cache
Date Mon, 15 Sep 2014 19:05:13 GMT
Connection keep-alive
响应正文为空。请注意,详细信息中的内容长度与摘要中的“已接收”值不匹配。
根据 CDN 日志和 Fiddler2 本地跟踪流量,CDN 正在提供完整的字体文件。据我所知,来自 CDN 的响应与来自我的服务器的响应相同。
启用缓存似乎消除了这种影响(至少,我无法在启用缓存的情况下重现它),但是当权者担心这会影响应用程序中其他不可缓存的资产已过渡到 CDN,因此我必须找到根本原因并修复它,而不是贴上创可贴。
为什么 IE 11 会表现得好像响应具有空响应体?如果文件和响应标头相同,为什么 IE 11 会区别对待来自 CDN 的响应和来自应用服务器的响应?
【问题讨论】: