ChatGPT解决这个技术问题 Extra ChatGPT

资源解释为样式表,但使用 MIME 类型 text/html 传输(似乎与 Web 服务器无关)

我有这个问题。 Chrome 继续返回此错误

资源解释为样式表,但使用 MIME 类型 text/html 传输

受此错误影响的文件只是 Style, selected 和 jquery-gentleselect (以相同方式导入索引中的其他 CSS 文件运行良好且没有错误)。我已经检查了我的 MIME 类型并且 text/css 已经在 CSS 上。

老实说,我想从理解问题开始(这似乎是我无法独自完成的事情)。

你能提供这个样式表的 URL 吗?
以防万一有人需要这个。由于 css 文件的压缩,这发生在我身上。不知何故,经过两次压缩,一次在本地,一次来自我的 CDN 提供商,服务器无法识别它了。
当由于中间件(静态文件服务之前的身份验证中间件)的排序问题而在服务器上重定向样式表标记的请求时发生这种情况。控制台 Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:3000/login". login:1 Uncaught SyntaxError: Unexpected token < 中的错误消息显示重定向的页面 url 而不是原始的 css 请求,这使得追踪起来有点困难。
我也经历过@vaughan 遇到的情况。这是因为样式表需要身份验证。 . .在尝试执行身份验证的页面上。真正难以解决的问题,但一旦你弄清楚,它似乎很明显。
很多人在不同的环境中为这个问题添加了不同的解决方案。在找到我的(Reactjs)之前,我不得不滚动很多。如果您没有像 SO 中通常那样找到靠近顶部的位置,请不要放弃。

Q
Quentin

我想从了解问题开始

浏览器向服务器发出 HTTP 请求。然后服务器做出 HTTP 响应。

请求和响应都包含一堆标头和一个(有时是可选的)正文,其中包含一些内容。

如果有正文,那么其中一个标题是 Content-Type,它描述了正文是什么(它是 HTML 文档吗?图像?表单提交的内容?等等)。

当您请求样式表时,服务器告诉浏览器它是 HTML 文档 (Content-Type: text/html) 而不是样式表 (Content-Type: text/css)。

我已经检查了 myme.type 并且 text/css 已经在 css 上。

然后关于您的服务器的其他一些事情使该样式表带有错误的内容类型。

使用浏览器开发人员工具的“网络”选项卡检查请求和响应。


我认为我很确定问题出在我的 .htaccess 中,它是 pastebin.com/w8UnqFs8(我忘了提到这个错误只在子目录中给我,并且只有在页面刷新之后)。感谢您的解释,对理解问题非常有帮助。 :)
确保您无需登录即可访问该文件。
@Max你为什么不把这些信息放在实际问题中? :)
S
Sten Muchow

使用角度?

这是要记住的一个非常重要的警告。

基本标签不仅需要在头部,而且需要在正确的位置。

我的基本标签在头部的错误位置,它应该出现在任何带有 url 请求的标签之前。基本上将它作为标题下方的第二个标签为我解决了它。

<base href="/">

我在上面写了一个小帖子here


使用 ng-href 而不是 href 为我解决了这个问题!
我收到了 OTS 解析错误:无效的版本标签,但是在寻找解决方案时发现了这个,天哪,这救了我。
就我而言,我使用 .htaccess 重写规则将目录更改为查询字符串变量,例如:RewriteRule ^my_dir/(.+)$ /new_dir/?my_var=$1 [L,QSA]
像 Max 一样,这解决了我的问题,尽管我没有使用 Angular。我首先将有问题的链接/href 放在所有其他链接的前面,在我的头部 - 并且警告消失了。
我认为这是大多数 SPA 的情况。这适用于我的纯 JS SPA(无框架)。
e
eunoia

我也遇到了这个错误,并找到了解决方案。这并不能解释为什么会发生错误,但它似乎在某些情况下可以修复它。

在 css 文件的路径之前包含一个正斜杠 /,如下所示:

<link rel="stylesheet" href="/css/bootstrap.min.css">


这在这种情况下是否相关?
我在这个小错误上浪费了很多时间。如果有人会阅读我的答案并且这将对他有所帮助,那么在这种情况下将是相关的。
实际发生的是服务器在 /css/bootstrap.min.css 上提供了文件,但是当您没有包含 / 时,它只会在当前目录中查找它,例如,如果您转到 yoursite.com/hello/trilochan ,它将在 {4 } ,但它确实在 yoursite.com/css/bootsrap.min.css 下,我希望我清除了这个,/ 指的是 root,没有 / ,它会在当前目录中查找。
@GillesGouaillardet 这非常相关,我遇到了同样的问题。
对我来说,诀窍是将 type="text/css" 添加到标签中。
J
JEuvin

我的问题比这篇文章中的所有答案都简单。

我必须设置 IIS 以包含静态内容。

https://i.stack.imgur.com/RVg0G.png


F
Felipe Cruz

将匿名身份验证凭据设置为应用程序池身份对我来说是诀窍。

https://i.stack.imgur.com/JSZg6.png


U
Unheilig

试试这个<link rel="stylesheet" type="text/css" href="../##/yourcss.css">

其中 ## 是您的文件夹,其中是您的 .CSS - 文件

不要忘记:..(双点)。


我添加了双点和斜线(../file_path)。它对我有用。谢谢
添加这两个..的原因是什么
哎呀,这么简单的被忽略的错误,我的只是指向错误的路径。使用 .. 只会上升 1 个目录。
S
Sandeshwar Sharma

我也面临同样的问题。并且在做了一些研发之后,我发现问题出在文件名上。实际文件的名称是“lightgallery.css”,但在链接时我输入了“lightGallery.css”。

更多信息:

它在我的本地主机上运行良好(操作系统:Windows 8.1 和服务器:Apache)。但是当我将我的应用程序上传到远程服务器(与我的本地主机不同的操作系统和 Web 服务器)时,它不起作用,给了我和你一样的错误。

因此,问题在于服务器的区分大小写(相对于文件名)。


j
jmelody

如果您使用 nginx 提供静态 css,您应该添加

location ~ \.css {
    add_header  Content-Type    text/css;
}
location ~ \.js {
    add_header  Content-Type    application/x-javascript;
}

或者

location ~ \.css{
    default_type text/css;
}
location ~ \.js{
    default_type application/x-javascript;
}

到 nginx 配置文件


n
nicolashahn

根据其他答案,这条消息似乎有很多原因,我想我只是分享我的个人解决方案,以防将来有人遇到我的确切问题。

我们的站点从使用 S3 存储桶作为源的 AWS Cloudfront 发行版加载 CSS 文件。这个特殊的 S3 存储桶与运行 Jenkins 的 Linux 服务器保持同步。通过 s3cmdsync 命令根据操作系统所说的(可能基于文件扩展名)自动设置 S3 对象的 Content-Type。出于某种原因,在我们的服务器中,所有类型都设置正确,除了 .css 文件,它给出了类型 text/plain。在 S3 中,当您检查文件属性中的元数据时,您可以将类型设置为您想要的任何类型。将其设置为 text/css 可以让我们的网站正确地将文件解释为 CSS 并正确加载。


S
SourceVisor

@Rob Sedgwick 的回答给了我一个指针,但是,在我的情况下,我的应用程序是一个 Spring Boot 应用程序。所以我只是在我的安全配置中为相关文件的路径添加了排除项......

注意 - 此解决方案是基于 SpringBoot 的......您可能需要做的事情可能会根据您使用的编程语言和/或您使用的框架而有所不同

但是要注意的一点是;

本质上,当每个请求(包括静态内容的请求)都经过身份验证时,可能会导致问题。

因此,假设一些导致错误的静态内容的路径如下;

称为“插件”的路径

http://localhost:8080/plugins/styles/css/file-1.css http://localhost:8080/plugins/styles/css/file-2.css http://localhost:8080/plugins/js/脚本文件.js

还有一条叫做“pages”的路径

http://localhost:8080/pages/styles/css/style-1.css http://localhost:8080/pages/styles/css/style-2.css http://localhost:8080/pages/js/脚本.js

然后我只需在我的 Spring Boot 安全配置中添加如下排除项;

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers(<comma separated list of other permitted paths>, "/plugins/**", "/pages/**").permitAll()
            // other antMatchers can follow here
    }

}

从身份验证中排除这些路径“/plugins/**”和“/pages/**”使错误消失。

干杯!


@Ben Rhys-Lewis ...我想知道为什么您认为这是一个问题,甚至看起来像一个问题。也许,您想仔细阅读我的答案,以了解它实际上是一个答案——唉,这对我来说是有效的……而且绝对不是问题。
对不起这是我的错。我不知道那是怎么发生的,我发出了嘘声。请接受我的道歉。
P
Peter Wilson

使用角度

在我的情况下,使用 ng-href 而不是 href 为我解决了这个问题。

笔记 :

我正在使用 laravel 作为后端


但是在哪里添加呢?
在链接标签中
G
Greg Artisi

如果您使用 JSP,则此问题可能来自您的 servlet 映射。如果您的映射默认使用 url,如下所示:

@WebServlet("/")

然后容器解释您的 css url,并转到 servlet 而不是转到 css 文件。

我有同样的问题,我改变了我的映射,现在一切正常


L
Light93

我面临着同样的事情,使用相同的 .htaccess 文件来制作漂亮的 url。经过几个小时的环顾和试验。我发现错误是因为相对链接文件。

浏览器将开始为所有 css、js 和图像文件获取相同的源 html 文件,此时我将浏览几个步骤深入服务器。

为了解决这个问题,您可以在 html 源代码中使用 <base> 标记,

<base href="http://localhost/assets/">

并链接到文件,例如,

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

或对所有文件使用绝对链接。

<link rel="stylesheet" type="text/css" href="http://localhost/assets/css/style.css" />
<script src="http://localhost/assets/js/script.js"></script>
<img src="http://localhost/assets/images/logo.png" />

R
Rob Sedgwick

我在使用表单身份验证的 MVC4 中有类似的问题。问题是 web.config 中的这一行,

<modules runAllManagedModulesForAllRequests="true">

这意味着每个请求(包括静态内容的请求)都经过身份验证。

将此行更改为:

<modules runAllManagedModulesForAllRequests="false">

Z
Zaid Bin Khalid

https://i.stack.imgur.com/nfxaV.png

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

你一定是在开玩笑吧。像 3 次一样驳回了这个解决方案。多次出现在这个页面上,但在尝试了其他所有方法并准备放弃之后,我说:“哎呀会出什么问题”。有效!!!生命之谜
D
Dgoldenone

对于任何可能遇到此问题的人。遇到此问题时,我正在用 PHP 构建自定义 MVC。

我可以通过将我的资产(css/js/images)文件设置为绝对路径来解决这个问题。而不是使用像 href="css/style.css" 这样的 url,它使用整个当前 url 来加载它。例如,如果您在 http://example.com/user/5,它将尝试在 http://example.com/user/5/css/style.css 加载。

要修复它,您可以在资产 url 的开头添加 / (即 href="/css/style.css")。这将告诉浏览器从您的 url 的根目录加载它。在此示例中,它将尝试加载 http://example.com/css/style.css

希望此评论对您有所帮助。


A
Ayush Agarwal

这是因为您必须将服务器页面(php、node.js 等)的内容类型设置为 text/html 而不是 text/css


这个问题是关于一个css文件,而不是一个html文件
S
Sandy Gettings

我想在 OP 中扩展 Todd R 的观点。在 asp.net 页面中,web.config 文件定义了访问应用程序中每个文件或文件夹所需的权限。在我们的例子中,CSS 文件的文件夹不允许未经授权的用户访问,导致它在用户被授权之前在登录页面上失败。更改 web.config 中的所需权限允许未经授权的用户访问 CSS 文件并解决此问题。


K
KF2

我有同样的问题,经过几分钟的闲逛,我发现我错过了将文件扩展名添加到我的标题中。所以我更改了以下行:

<link uic-remove rel="stylesheet" href="css/bahblahblah">

<link uic-remove rel="stylesheet" href="css/bahblahblah.css"> 

A
ArrowKneeous

使用反应

我在我的反应配置文件应用程序中遇到了这个错误。我的应用程序的行为有点像它试图引用一个不存在的 url。我相信这与 webpack 的行为方式有关。

如果您要链接公用文件夹中的文件,您必须记住在资源之前使用 %PUBLIC_URL%,如下所示:

<link type="text/css" rel="stylesheet" href="%PUBLIC_URL%/bootstrap.min.css" />

H
Hideous1

万一有人来到这篇文章并有类似的问题。我刚刚遇到了类似的问题,但解决方案非常简单。

开发人员错误地将 web.config 的副本放入 CSS 目录。删除后,所有错误均已解决,并且页面正确显示。


感谢@Rohit Gupta 的编辑。我的打字速度比我的内部语法管理器处理的还要快! =)
这是一个特定于 ASP.NET 的解决方案,这不是问题的明显部分。
@dakab 那又怎样?许多其他答案也是特定于框架的,它们帮助人们使用那些遇到相同问题的框架。
c
captainkirk

我在恢复旧 MEAN 堆栈项目的工作时遇到了同样的问题。我使用 nodemon 作为我的本地开发服务器并得到相同的错误 Resource interpreted as stylesheet but transferred with MIME type text/html。我从 nodemon 更改为 http-server,可以找到 here。它立即对我有用。


s
steampowered

当我从 google CDN 提供的 css 样式表的 css 链接中删除协议时,就会发生这种情况。

这没有错误:

<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Architects+Daughter">

但这给出了错误资源解释为样式表但使用 MIME 类型 text/html 传输:

<link rel="stylesheet" href="fonts.googleapis.com/css?family=Architects+Daughter">

O
Ortund

我面临着类似的问题。并在这个奇妙的 Stack Overflow 页面中探索解决方案。

user54861 的响应(区分大小写的名称不匹配)让我好奇地再次检查我的代码并意识到“我没有上传两个我在 head 标签中加载它们的 js 文件”。 :-)

当我上传它们时,问题就消失了!并且代码运行和页面呈现没有任何其他错误!

因此,故事的寓意是不要忘记确保将所有 js 文件上传到页面正在寻找它们的位置。


这并没有真正回答这个问题。如果您有其他问题,可以点击 Ask Question 提出问题。一旦您有足够的reputation,您还可以通过add a bounty 来引起对这个问题的更多关注。 - From Review
如果开发人员没有将资源加载到服务器,就不能成为 ecma 脚本设计人员向 javascript 添加相关错误或异常的线索吗?我的意思是“资源解释为样式表但使用 MIME 类型 text/html 传输”有点令人困惑,不是吗?
H
HI360

我在 .NET 应用程序中遇到了同样的问题,这是一个名为 MojoPortal 的 CMS 开源软件。在我的一个特定站点的主题和皮肤中,当浏览或测试时,它会像窒息一样磨碎和减速。

我的问题不是 CSS 的“类型”属性,而是“其他东西”。我的确切更改是在 Web.Config 中。我将 MinifyCSS、CacheCssOnserver 和 CacheCSSinBrowser 的所有值都更改为 FALSE。

一旦设置好,网站就可以再次快速投入生产。


J
Juergen

有同样的错误,因为我忘了先发送正确的标题

header("Content-type: text/css; charset: UTF-8");
print 'body { text-align: justify; font-size: 2em; }';

G
Greg Holst

我在为使用 npm 安装的 React 布局模块加载 CSS 时遇到了这个问题。你必须导入两个 .css 文件才能运行这个模块,所以我最初是这样导入它们的:

@import "../../../../node_modules/react-grid-layout/css/styles.css";

但发现必须删除文件扩展名,所以这行得通:

@import "../../../../node_modules/react-grid-layout/css/styles";

G
George Livingston

如果 nodejs 并使用 express 下面的代码工作......

res.set('Content-Type', 'text/css');

在这里评论是因为它与 Node.JS 相关。我不得不在我的托管服务提供商上重新启动应用程序
M
Max Pietrzak

我今天开始只在 chrome 上遇到问题,而不是在我的 goormide 容器(node.js)的同一个项目/url 的 safari 上

在尝试了上面的几个似乎不起作用的建议并回溯了我从昨天到今天所做的一些代码更改之后,这也没有任何区别,我最终在 chrome 设置中单击:

1.设置;

2.向下滚动到底部,选择:“高级”;

3.向下滚动至底部,选择:“将设置恢复为原始默认值”;

这似乎已经解决了问题,因为我不再在控制台中收到警告/错误,并且页面按原样显示。阅读上面的帖子,似乎问题可能来自任意数量的来源,因此重置设置是一个潜在的通用修复。干杯


H
Hvitis

如果您在 prod 中为应用程序提供服务,请确保您使用服务人员提供静态文件。当我在 Django 上仅提供 React 构建的静态子文件夹时出现此错误(没有具有样式的资产)