socket.io - 套接字 io CORS 被阻止
问题描述
我在使用 https 域和 https 套接字 io 时收到此警告。
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://iosocket.transys.id:30005/socket.io/?EIO=3&transport=polling&t=McZQ-hN. (Reason: CORS request did not succeed).
我的代码是这样的:
var socket = require( 'socket.io' );
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = socket.listen( server);
var port = process.env.PORT || 3000;
var storesession = [];
server.listen(port, function () {
console.log('Server listening at port %d', port);
});
io.set('transports',['websocket']);
io.on('connection', function (socket) {
想有答案来解决这个问题。我已经从其他人那里搜索过了,我申请的时候不起作用。
解决方案
根据项目的情况,这可能不是您所需要的。但无论如何,我写它可能会帮助某人。我自己想Socket.IO + NodeJS
从用 php 渲染的脚本连接到。
两端的完整工作代码可以是这样的:
服务器:
let pth = require('path');
let exp = require('express');
let app = exp();
//UPDATE: this is seems to be deprecated
//let io = require('socket.io').listen(app.listen(9009));
//New Syntax:
let io = require('socket.io')(app.listen(9009));
app.all('/', function (q, p, next) {
p.header("Access-Control-Allow-Origin", "*");
p.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
io.on('connection', (socket) => {
console.log("connected");
socket.on('msg', (msg) => {
console.log(msg);
io.emit('msg', msg);
});
});
客户端(在我的例子中是一个 php 脚本):
<head>
<script src="http://127.0.0.1:9009/socket.io/socket.io.js"></script>
<script>
let $$ = (id) => {return document.getElementById(id);};
var socket = io("127.0.0.1:9009/", {
"force new connection": true,
"reconnectionAttempts": "Infinity",
"timeout": 10001,
"transports": ["websocket"]
});
socket.on('msg', (msg) => {$$("holder").innerHTML += msg;});
let emit = (_msg) => {socket.emit("msg", _msg);};
</script>
</head>
<body>
<?php echo "php echo ...";?>
<div onclick="socket.emit('msg','my msg');">BUTTON</div>
<div id="holder">Chat ...</div>
</body>
推荐阅读
- leaflet - 获取矩形或多边形的每个角/顶点的坐标列表
- vba - 使用 VBA 在 Microsoft Word 中搜索和替换用户决策
- javascript - 反应原生嵌套导航问题
- oracle - 由于错误 weblogic.application.ModuleException 无法初始化应用程序“DataSource”
- php - 在 apache 网络服务器上使用棘轮 websocket 库为安全 websocket 配置虚拟主机
- azure - 跨 Azure AD 资源
- r - 为所有一个变量分配相同的随机值?
- google-cloud-functions - Firebase 云功能/一个有效,另一个(相同功能)无效
- audio - 使用 ffmpeg 将 rtsp 流推送到 rtmp 时出现音频间隙
- mongodb - 如何将 mongoDB Compass 连接到在 Google Cloud VM 实例上运行的 mongoDB 实例?