我正面临着IE浏览器的问题。它正在加载第一次加载的图标。但如果我刷新页面,图标将不可见。你能告诉我如何从服务器端解决这个问题吗?这与Font-awesome disappears after refresh for all ie browsers ie11,ie10,ie9有关。但它没有完整的解决方案
答案 0 :(得分:4)
我们遇到了同样的问题,因为我们在本地存储了FA CSS文件。字体@import
在刷新时会失败,可能是因为它执行的HTTP调用与本地文件的调用不同。我们恢复了他们的CDN,它解决了这个问题。如果您下载了FA文件但没有通过CDN将其拉入,请将<link>
中的<head>
标记更改为:
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
一旦我们这样做,FontAwesome就会在每次刷新时都没有问题。
答案 1 :(得分: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
}
}
答案 2 :(得分:1)
CV Harris 提供的建议工作正常。但是,我们不想使用CDN中的文件。
对于我们来说,将Spring Security升级到4.2.3后会出现图标问题。因此,如Spring security configuration中所述,在spring配置中添加了以下内容。
默认-禁用= “真”
现在图标显示在IE11中。
答案 3 :(得分: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
答案 4 :(得分:0)
我知道...个老问题...但仍然有意义。我遇到了同样的问题...使用CDN可行,但是我自己没有托管FA CSS。
事实证明,这与其他人建议的缓存有关。我已经关闭了以下BeginRequest方法中的所有内容的缓存(由于某种原因,现在使我逃脱了……可能对其他问题进行故障排除),但是似乎FA确实想要缓存... /耸肩。
protected void Application_BeginRequest()
{
Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
}
在刷新时注释掉了固定的FA图标,尽管我现在的任务是使其更加细腻...