当前位置: 首页 > 面试题库 >

服务人员注册错误:不支持的MIME类型('text / html')

司徒光霁
2023-03-14
问题内容

我使用的是创建反应的应用程序内有明确的服务器。

create-react- app有一个预先配置的ServiceWorker可以缓存本地资产(https://github.com/facebook/create-react-
app/blob/master/packages/react-scripts/template/README.md#making-a-
progressive-web -app

)。

尝试在服务器上发布时遇到的问题是service-worker.js文件可用,但是尝试注册文件时浏览器控制台出现错误。

在Firefox上,出现以下错误:

服务人员注册期间发生错误:

类型错误:在ServiceWorker脚本https://my-domain.com/service-worker.js的范围https://my-domain.com/安装过程中遇到错误。

在Chrome上,我得到了更具描述性的错误:

注册Service Worker时出错:DOMException:无法注册ServiceWorker:脚本具有不受支持的MIME类型(’text /
html’)。

果然,如果我在开发人员工具的“网络”选项卡中查找并搜索该service-worker.js文件,则可以看到该文件在HTTP标头中具有错误的MIME类型。

但是,我不明白为什么它的MIME类型错误?


问题答案:

在我的Express服务器应用程序中,我有一个通配符(星号/ *)路由重定向到index.html

// Load React App
// Serve HTML file for production
if (env.name === "production") {
  app.get("*", function response(req, res) {
    res.sendFile(path.join(__dirname, "public", "index.html"));
  });
}

这是一种非常常见的设计模式。但是,这意味着对未知文本文件的所有请求最初都会重定向到index.html,因此返回MIME类型"text/html",即使它实际上是JavaScript或SVG或其他某种纯文本文件。

我发现的解决方案是在通配符路由service-worker.js 之前 添加特定的路由:

app.get("/service-worker.js", (req, res) => {
  res.sendFile(path.resolve(__dirname, "public", "service-worker.js"));
});
app.get("*", function response(req, res) {
  res.sendFile(path.join(__dirname, "public", "index.html"));
});

现在,当浏览器查找时service-worker.js,Express将以正确的MIME类型返回它。

(请注意,如果您尝试service-worker.js在通配符后添加路由,则将无法使用,因为通配符路由将被覆盖。)



 类似资料:
  • 我正在使用带有express服务器的create react应用程序。 有一个预配置的ServiceWorker,用于缓存本地资产(https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#making-a-progressive-web-app)。 当我试图

  • 由于以下错误,服务人员未注册 服务人员登记册 作为github问题发布:https://github.com/facebook/create-react-app/issues/8593 Service Worker在尝试注册时出现以下错误: 在Service Worker注册过程中出错: DOMExc0019:无法使用脚本(http://localhost:3000/sw.js)为作用域('htt

  • 我正在尝试将服务人员添加到现有的angular(5.2,CLI 1.7.1)应用程序中。我做了我应该做的一切: > 我甚至尝试将这段代码(我在某处找到了解决方案)添加到main。ts 但我有一个错误: 未捕获(promise中)DOMExc0019:注册ServiceWorker失败:脚本具有不受支持的MIME类型('text/html')。 错误:未捕获(promise中):安全错误:注册Ser

  • 我已经构建了一个RESTendpoint,它使用Spring和Apache CXF2.5来使用和生成Application/JSON。 配置: 当我使用不受支持的内容类型(如application/xml)发送请求(使用REST客户端应用程序)时,我会得到一个内部服务器错误。我希望是405,因为endpoint不支持任何其他内容类型。为什么我会得到这个例外?

  • 我正在开发基本的Spring Boot应用程序,它启用了Spring Security性 当我尝试在my thymeleaf HTML中使用CSS时,出现以下错误: 拒绝应用http://localhost:9999/login的样式,因为它的MIME类型(text/html)不是受支持的样式表MIME类型,并且启用了严格的MIME检查。