拒绝执行脚本 runtime.js,因为 MIME 类型不可执行
Posted
技术标签:
【中文标题】拒绝执行脚本 runtime.js,因为 MIME 类型不可执行【英文标题】:Refused to execute script runtime.js because MIME type is not executable 【发布时间】:2019-02-18 18:58:59 【问题描述】:这是我在执行浏览器检查时遇到的错误 -> index.html 文件的控制台选项卡。
拒绝执行来自“http://localhost:63342/runtime.js”的脚本 因为它的 MIME 类型 ('text/html') 是不可执行的,并且严格的 MIME 类型检查已启用。
我的应用是 spring-boot 和 Angular 的集成。 我相信这也是 spring-boot 没有在 UI 上提供前端 js 和 .html 文件内容的原因。 虽然后端应用程序工作正常,但在 tomcat 服务启动时,它没有显示任何 UI http://localhost:8080.
Angular CLI: 6.0.8
Node:10.0.0
OS: darwin x64
Angular: 6.1.7
生成的 index.html 有标签:
<script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="polyfills.js"></script>
<script type="text/javascript" src="styles.js"></script>
<script type="text/javascript" src="vendor.js"></script>
<script type="text/javascript" src="main.js"></script>
手动将类型更改为“text/html”可解决错误,但仍不会在 UI 上显示任何内容。
这是由于特定的 angular-cli 版本造成的问题吗?我的两个问题(弹簧不提供前端静态资源)是否相关?还是 base href 错误?
如果不手动更改脚本标签中的类型,有没有办法解决这个问题?因为 index.html 在运行ng build
时生成并被放置在资源目录中。我这样做是为了使部署更容易。这是整个生成的 index.html 文件:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Welcome App</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
<script type="text/javascript" src="runtime.js"></script><script type="text/javascript" src="polyfills.js"></script><script type="text/javascript" src="styles.js"></script><script type="text/javascript" src="vendor.js"></script><script type="text/javascript" src="main.js"></script></body>
</html>
我是这方面的新手,请提供帮助。
这是我在浏览器检查 -> 网络 -> 标题中看到的(当从 Intellij 中的浏览器选项打开文件并且 tomcat 未运行时)。 生成的角度文件之一的响应标头:
HTTP/1.1 304 Not Modified
content-type: text/html
server: IntelliJ IDEA 2018.1.2
date: Sun, 16 Sep 2018 16:08:39 GMT
X-Frame-Options: SameOrigin
X-Content-Type-Options: nosniff
x-xss-protection: 1; mode=block
但是当 tomcat 启动并运行时,请注意检查 200 响应:
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
因为它的 app/json 和我看到 [ ] 作为响应,我认为这是错误的,应该是一个 html 响应。
这些在 ng build in index.html 上添加的脚本标签是否会导致无法在 UI 或其他内容上显示内容?我不这么认为,因为我复制粘贴了我的静态内容在一个演示 gradle 项目中(来自https://start.spring.io/),它在网页上显示 UI,所以我相信将“text/javascript”更改为“html”并不是一个真正的问题;但不确定。这就是我对工作 UI 的回应:
HTTP/1.1 200
Accept-Ranges: bytes
Content-Type: text/html;charset=UTF-8
有什么建议吗?
【问题讨论】:
试试this? 您的网络服务器正在发送具有错误 mime 类型的 javascript 文件。粘贴响应的 contentType 标头。 @Rafael 感谢您的回复。我编辑了帖子(在底部)以放置响应标题。注意:这个粘贴的响应头是在将脚本类型更改为“text/html”之前。所以目前它的“文本/javascript” @SoC 更改<script>
标签的type
属性将一事无成。您需要重新配置您的服务器,以便它为带有 content-type: text/javascript
HTTP 标头的 .js
文件提供服务。
@Bergi 我同意你的看法,这就是为什么将我的类似想法发表在帖子中。但是,我不确定如何重新配置服务器以提供 .js 文件。
【参考方案1】:
如果您使用的是 apache2,请检查 /etc/apache2/ 中的 apache2.conf
确保你有这一行:
AddType text/javascript .js
确保 mod:mime 已安装并启用:
sudo a2enmod mime
【讨论】:
以上是关于拒绝执行脚本 runtime.js,因为 MIME 类型不可执行的主要内容,如果未能解决你的问题,请参考以下文章
拒绝执行脚本,因为它的 MIME 类型 ('text/html') 不可执行,并且启用了严格的 MIME 类型检查
拒绝执行脚本,因为它的 MIME 类型 ('text/html') 不可执行并且启用了严格的 MIME 类型检查
拒绝从 '*' 执行脚本,因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查
拒绝从“*”执行脚本,因为它的 MIME 类型('text/HTML')不可执行
拒绝从 URL 执行脚本,因为它的 MIME 类型 ('application/json') 不可执行,并且启用了严格的 MIME 类型检查