“socket.io.js”由于 MIME 类型而被阻止
Posted
技术标签:
【中文标题】“socket.io.js”由于 MIME 类型而被阻止【英文标题】:"socket.io.js" was blocked due to MIME type 【发布时间】:2021-09-04 09:56:41 【问题描述】:我正在尝试学习 Socket.io,但我无法制作一个有效的项目,因为我制作的每个项目都有一个 MIME 类型不匹配。
错误: 由于 MIME 类型(“text/html”)不匹配(X-Content-Type-Options: nosniff),来自“http://localhost:5500/socket.io/socket.io.js”的资源被阻止。
为了测试这一点,我从 Github 找到了一个可以工作的聊天应用程序项目,并测试了该代码并遇到了同样的问题。该代码可以在以下位置找到:https://github.com/bradtraversy/chatcord
代码似乎正确地创建了一个 socket.io 实例:
const app = express();
const server = http.createServer(app);
const io = socketio(server);
// Set static folder
app.use(express.static(path.join(__dirname, 'public')));
...
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => console.log(`Server running on port $PORT`));
HTML将JS与线连接起来:
<script src="/socket.io/socket.io.js"></script>
此 MIME 类型消息后跟有关客户端代码的“io is not defined”错误:
const socket = io();
这种 MIME 类型出现在 Firefox 上,但不在 Chrome 上,它不会而且只会给出 404 未找到。我不知道这是否只是浏览器的差异。
【问题讨论】:
我检查了您的存储库,运行了代码,但无法重现问题。错误没有发生,URL解析为一些JS。可能是你编辑完代码忘记重启服务器了,可能需要清除浏览器缓存。 【参考方案1】:实际上,浏览器无法下载http://localhost:5500/socket.io/socket.io.js
处的javascript文件。因此,io()
方法未定义。
您可以尝试从 CDN 加载文件,如 documentation 中所述。替换
<script src="/socket.io/socket.io.js"></script>
作者:
<script src="https://cdn.socket.io/3.1.3/socket.io.min.js" integrity="sha384-cPwlPLvBTa3sKAgddT6krw0cJat7egBga3DJepJyrLl4Q9/5WLra3rrnMcyTyOnh" crossorigin="anonymous"></script>
编辑: 我试图重现你的问题,但我不能。所以,我提供了我的环境的最大信息供您重现结果:
我使用存储库chatcord
(克隆并运行npm run dev
)
我的服务器在 3000 端口上运行。
我的节点版本:v14.17.0
我的 npm 版本:v7.13.0
我的系统:Windows 10
该项目无需任何修改即可运行。当我尝试使用 CDN 中的 socket.io 时,我需要在服务器端使用与已安装模块相同的版本(^2.0.4 基于package.json
)
【讨论】:
这听起来是问题的正确根源,但它并不包含真正的解决方案,而是一种避免策略;-) 问题是正确的:为什么浏览器不加载io
来自socket.io.js
?
是的,我去了文档页面,上面写着By default, the Socket.IO server exposes a client bundle at /socket.io/socket.io.js.
。老实说,我找不到为什么它在问题中的信息在这里不起作用。因此,我尝试提供一种替代解决方案(也来自文档:))
切换到使用 CDN(或直接复制 CDN 文件)会导致每隔几秒重复一次失败的 GET 请求:GET 127.0.0.1:5500/socket.io/… [HTTP/1.1 404 Not Found 2ms]
它试图连接到服务器但它不能。您是否使用存储库 chatcord
对其进行了测试?
是的,这是我测试过的那个以上是关于“socket.io.js”由于 MIME 类型而被阻止的主要内容,如果未能解决你的问题,请参考以下文章
本地文件(无服务器)上的 Internet Explorer“由于 mime 类型不匹配而忽略 CSS”
本地文件(无服务器)上的 Internet Explorer“由于 mime 类型不匹配而忽略 CSS”
带有express和socket.io的节点js-找不到socket.io.js
错误:由于 MIME 类型(“text/html”)不匹配而被阻止(X-Content-Type-Options: nosniff)