CSS 文件阻塞: MIME 类型不匹配(X-Content-Type-Options: nosniff)

我正在开发一个角4应用程序,我想应用一些全球风格。在 角位置的教程之后,我已经在我的应用程序的根目录中创建了一个“ styles.css”文件,我在我的应用程序的 index.html 中引用这个样式表:

<link rel="stylesheet" type="text/css" href="styles.css">

角度应用程序编译成功:

$ ng serve
** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200 **
[...]
webpack: Compiled successfully.

但是当我在 Chromium 浏览器中访问 http://localhost:4200时,控制台显示一个错误

GET http://localhost:4200/styles.css

在 Firefox 浏览器中,这个错误更加明显:

GET
http://localhost:4200/styles.css [HTTP/1.1 404 Not Found 15ms]
The resource from "http://localhost:4200/styles.css" was blocked due to MIME type mismatch (X-Content-Type-Options: nosniff).

这两个文件 index.html 和 styles.css 都位于我的 angle 应用程序的根目录中。 我曾试图获得 关于这个问题的更多信息:

nosniff
Blocks a request if the requested type is


"style" and the MIME type is not "text/css", or
"script" and the MIME type is not a JavaScript MIME type.

但是我不明白为什么它会阻塞请求,因为我在引用样式表时已经指定了 type="text/css"

153668 次浏览

我也遇到了同样的问题。这似乎是一个怪异的 特快,可以表现自己为几个不同的原因,从搜索“ nodejs 表示 css 哑剧类型”的网络点击量判断。

尽管我们在 <link元素中放入了 type="text/css"属性,Express 将 CSS 文件作为

Content-Type: "text/html; charset=utf-8"

而它真正应该返回的是

Content-Type: "text/css"

对我来说,最快捷的解决方法就是简单地删除 rel=属性,也就是更改

<link rel="stylesheet" type="text/css" href="styles.css">

<link type="text/css" href="styles.css">

测试证实了 CSS 文件已经下载,并且样式确实可以工作,这对于我的目的来说已经足够好了。

我也删除了 rel = "stylesheet",我不再得到 MIME 类型错误,但样式没有被加载

有些答案建议删除 rel = “样式表”,但这对我来说并不适用。 根据 Expressjs 文档: https://expressjs.com/en/starter/static-files.html 使用 express.static函数服务静态文件,如 CSS、 JavaScript 等。

app.use(express.static('public'))

从那里您应该能够加载公共目录下的任何文件 例如,如果目录 {PROJECT_PATH}/public/css/中有一个 style.css 文件

http://localhost:3000/css/style.css会起作用的。

对于一个完整的堆栈 Web 应用程序(正在开发) ,我遇到了同样的问题,我只是通过正确地将 css 文件链接到呈现的页面来解决这个问题。正如上面建议的那样,删除 rel = stylesheet可以防止错误显示在浏览器中,但是它不会加载应该应用于页面的样式。简而言之,这不是一个解决方案。

如果你正在使用 express-static,你可以用这个例子:

服务器端:

app.use(express.static(__dirname + "/public", {
index: false,
immutable: true,
cacheControl: true,
maxAge: "30d"
}));

客户端:

 <link type="text/css" rel="stylesheet" href="/main.css">

只需在你想链接到 html 页面的文件前面添加一个正斜杠(如果你没有使用任何 template engines渲染 html 页面) ,Express-static 就会自动完成剩下的工作。

在 Angular 应用程序中的 javascript 文件(相对于 css)也有类似的问题。实际上,问题不在于 Mime 类型(如外部错误消息所示) ,而是最终出现了“404Notfound”错误。

在我的例子中,把脚本文件放在除了“资产”文件夹以外的任何地方都会导致404和最终的 mime 类型错误。下面的标记在 index.html 的 head 部分对我很有用:

<script src="assets/plugins/jquery.min.js" type="text/javascript"></script>

资产文件夹是 Index.html 文件的兄弟文件。

在我的例子中,我将下面的代码块以相反的顺序混乱了,所以我得到了这个错误。如果你有这个问题,按照下面的顺序,它可能会有所帮助

1.

 app.use(express.static(path.join(__dirname, 'public')));

2.

app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'public/index.html'));
});

3.

app.use('/api', cors(corsOptions), indexRouter);

这解决了我的问题:

app.use('/public', express.static(path.join(__dirname, "public")));

似乎对我有用的东西正在改变

<script type="text/javascript" src="/lib/matrix.js"></script>

<script type="text/javascript" src="./lib/matrix.js"></script>

一个简单的方法是在所使用样式表的路径之前添加一个正斜杠 /。对我来说是 href='css/style.css'改成了 href='/css/style.css'。非常有效。

我也遇到了这个问题,我用 Kirankumar Gonti 的提示解决了这个问题。

使用以下行:

app.use('/public', express.static(path.join(__dirname, "public")));

确保设置常量路径。

您还需要确保您的 css 文件夹嵌套在公用文件夹中。

如果这些解决方案不起作用:

 app.use(express.static('public'))//for server
<link rel="stylesheet" href="/index.css">//for styles

然后确保根目录中存在 「公众」 文件夹。

我也面临着同样的问题。但是我发现这与为 style.css 文件使用正确的目录有关。所以我尝试了下面这行代码,它工作得非常完美。

<link rel="stylesheet" type="text/css" href="/app/scss/style.css">

我也有这个问题。

我将脚本文件移动到了一个不同的位置,现在没有错误了:

<script src="./scripts/simple-keyboard/keyboard.index.min.js" type="text/html"></script>
<script src="./scripts/keyboard.index.min.js" type="text/javascript"></script>

正如 Davelli 指出的,问题不是文件不匹配,而是没有找到错误。奇怪的是,它返回了错误的错误!

我也遇到了这个问题,我用 Kirankumar Gonti 的提示解决了这个问题。

我在 app.js 文件中使用了下面这行代码,我没有一个公共文件夹,但是我的 style.css 存储在一个 css 文件夹中:

app.use('/css', express.static(path.join(__dirname, "css")));

在我的/css/style.css 文件中,我使用了:

<link rel="stylesheet" type="text/css" href="/css/style.css" />

这就是发生在我身上的事, 我的网站被归档,所以 css 和 js 文件不可用。恢复我的网站主机一切顺利。

所以,请检查网址是否正确。

对于仍然有这个错误的人,我可以通过在 angular.json 文件中包含“ src/asset”来解决它

"assets": ["src/favicon.ico", "src/assets", "src/upload.php"]

同样,index.html 的目录也不应该包含在资产中。意思是你不应该在“资产”中包含“ src”

在我的例子中,我只是在“ css/style.css”之前包含“/”

<link rel="stylesheet" href="css/styles.css" />


to


<link rel="stylesheet" href="/css/styles.css" />

我还使用 Express.static (‘ public’)