今天在ie9下碰到SEC7113: CSS 因 Mime 類型不匹配而被忽的問題,很詭異,css的內容能夠讀取但是瀏覽器就是不渲染,而啟用ie8的文檔模式則正常。報錯見圖。
現已解決,方案如下:
先check了link引用的方式,發現缺少type=text/css,加上后報錯依舊。
然后根據http://blog.163.com/lihuangsuo@126/blog/static/3686389120112174544383/網上的這些文章,把mime的type類型手動加到服務器應用的web.xml下,依舊無效。
check了tomcat和jetty的conf下默認web.xml里的mime的類型是否正確,發現配置正常,但是不管是什么服務器都報錯。
在chrome中發現warning
發現不管是css還是js的content-type都變成了text/plain
最后檢查應用的response部分發現輸出流前缺少設置content-type
String uri = request.getRequestURI();
if(uri.matches(".+(css|js|png|ico|swf)$")) {
String assetsRoot = getVelocityProperty(AppLoader.APP_LOADER_ASSETS_PATH, "/");
byte[] bytes = FileUtils.readFileToByteArray(new File(assetsRoot + uri));
ServletOutputStream outputStream = response.getOutputStream();
IOUtils.write(bytes, outputStream);
return;
}
於是手動設置content-type
String uri = request.getRequestURI();
if(uri.matches(".+(css|js|png|ico|swf)$")) {
String assetsRoot = getVelocityProperty(AppLoader.APP_LOADER_ASSETS_PATH, "/");
byte[] bytes = FileUtils.readFileToByteArray(new File(assetsRoot + uri));
response.setContentType(MimeHandler.getContentType(FilenameUtils.getExtension(uri)));
ServletOutputStream outputStream = response.getOutputStream();
IOUtils.write(bytes, outputStream);
return;
}
問題解決。