2014-10-30 53 views

回答

3

我們有同樣的問題,因爲我們在本地存儲FA CSS文件。字體@import的刷新失敗,可能是因爲它執行的是與本地文件不同的HTTP調用。我們恢復到他們的CDN,並解決了問題。如果你下載的文件FA和不通過CDN在拉他們,然後更改您的<head><link>標籤:

<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> 

一旦我們做到了FontAwesome正在擔任了在每次刷新時沒有問題。

+1

這不是一個完整的答案。有誰知道實際問題是什麼? IE不喜歡使用CSS的本地副本嗎?我有這個問題,但我必須在本地託管文件做項目限制。 – Mike 2015-10-19 18:39:16

+0

導致此問題的問題在此答案中有更詳細的描述:http://stackoverflow.com/a/32628649 – philreed 2016-01-25 12:11:19

2

在我的情況下,我使用的是java,唯一可行的是我創建的這個緩存過濾器。

import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebFilter("*") 
public class CacheFilter implements Filter { 

    /** 
    * @constructor CacheFilter 
    * @date 28/09/2015 
    */ 
    public CacheFilter() { 
     //construtor 
    } 

    /* (non-Javadoc) 
    * @see javax.servlet.Filter#destroy() 
    */ 
    @Override 
    public void destroy() { 
     //metodo vazio 
    } 

    /* (non-Javadoc) 
    * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) 
    */ 
    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse httpResponse = (HttpServletResponse) response; 
     HttpServletRequest httpRequest = (HttpServletRequest) request; 
     String page = httpRequest.getRequestURI(); 

     if (!page.contains("fontawesome-webfont") || !page.endsWith(".eot")){ 
      httpResponse.setHeader("Expires", "-1"); 
      httpResponse.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); 
      httpResponse.setHeader("Pragma", "no-cache"); 
     }else if(page.contains("fontawesome-webfont") && page.endsWith(".eot")){ 
      httpResponse.setHeader("Expires", "-1"); 
      httpResponse.setHeader("Cache-Control", "public"); 
      httpResponse.setHeader("Pragma", "cache"); 
     } 

     chain.doFilter(request, response); 
    } 

    /* (non-Javadoc) 
    * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 
    */ 
    @Override 
    public void init(FilterConfig fConfig) throws ServletException { 
     //metodo vazio 
    } 

} 
0

我做同樣的事情,https://stackoverflow.com/a/37196841/1982385只是我做這件事是反向代理(HAProxy的),而不是從servlet本身。

backend app 
    server server1 10.10.14.4:9090 check 
    acl is_woff capture.req.uri -m sub .woff 
    acl is_ttf capture.req.uri -m sub .ttf 
    acl is_eot capture.req.uri -m sub .eot 
    http-response set-header Cache-Control public if is_eot or is_woff or is_ttf 
    http-response set-header Expires -1 if is_eot or is_woff or is_ttf 
    http-response set-header Pragma cache if is_eot or is_woff or is_ttf