生产环境打包上线时页面样式无效,但测试服务正常

页面提示

Resource interpreted as Stylesheet but transferred with MIME type application/x-css

访问页面时css文件可以加载出来,但是样式无法生效

测试:
在这里插入图片描述
正式:
在这里插入图片描述
对比发现css文件的Content-Type变为了application/octet-stream

稍微了解一下,问题就知道出在哪里了

application/octet-stream
这是应用程序文件的默认值。意思是 未知的应用程序文件,浏览器一般不会自动执行或询问执行。浏览器会像对待 设置了HTTP头Content-Disposition 值为 attachment
的文件一样来对待这类文件。

text/plain
文件默认值。即使它意味着未知的文本文件,但浏览器认为是可以直接展示的。text/plain并不是意味着某种文本数据。如果浏览器想要一个文本文件的明确类型,浏览器并不会考虑他们是否匹配。比如说,如果通过一个表明是下载CSS文件的链接下载了一个text/plain 文件。如果提供的信息是text/plain,浏览器并不会认出这是有效的CSS文件。CSS类型需要使用text/css。

text/css
在网页中要被解析为CSS的任何CSS文件必须指定MIME为text/css。通常,服务器不识别以.css为后缀的文件的MIME类型,而是将其以MIME为text/plain 或 application/octet-stream 来发送给浏览器:在这种情况下,大多数浏览器不识别其为CSS文件,直接忽略掉。特别要注意为CSS文件提供正确的MIME类型。

text/html
所有的HTML内容都应该使用这种类型。XHTML的其他MIME类型(如application/xml+html)现在基本不再使用(HTML5统一了这些格式)。

解决方法1:

cd  etc/nginx/nginx.conf 

在htttp{}中加入

include /etc/nginx/mime.types;
default_type application/octet-stream;

在这里插入图片描述

然后

service nginx restart

由于我们是oss服务,所以上边nginx的办法不适用我们

解决方法2:
main.js样式引入顺序问题

组件内的样式没有生效,可能是被第三方组件样式覆盖了,main.js中router放在最后引入,就可以实现组件样式在第三方样式之后渲染。

// styles
import '@/assets/scss/core/reset.scss';
import '@/assets/scss/skin/index.scss';
import router from './router';

解决方法3:
解决使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”
ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加:
对于Ubuntu可以通过sudo apt-get install mime-support来添加。
对于CentOS可以通过sudo yum install mailcap来添加。
也可以手动添加,每种格式一行,每行格式为:application/javascript js。

解决方法4:
客户端请求时Accept和返回时的Content-Type,一般Tomcat自动完成配置(在tomcat/conf/web.xml中)考虑是否是工程中加了过滤器

Logo

前往低代码交流专区

更多推荐