我是socket.io的新手。我的NodeJs / Express服务器中有以下代码
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
io.on('connection', socket => {
console.log('New client connected');
socket.on('disconnect', () => console.log('Client disconnected'));
socket.emit('FromAPI', 'hello');
});
//My port here is 8848
app.listen(app.get('port'), () => {
logger.log('info', `Server started at :${app.get('port')}`);
});
在Client React应用程序中跟随代码,我的反应应用程序作为http://localhost:3000托管在端口3000中
import socketIO from 'socket.io-client';
componentDidMount() {
const endPoint = 'http://127.0.0.1:8848';
const socket = socketIO(endPoint);
socket.on('FromAPI', data => console.log(data));
}
使用此代码,我在浏览器控制台上收到以下错误:
polling-xhr.js:263 GET http://127.0.0.1:8848/socket.io/?EIO=3&transport=polling&t=MMT-4kl 405(方法不允许)无法加载http://127.0.0.1:8848/socket.io/?EIO=3&transport=polling&t=MMT-Aso:当请求的凭据模式时,响应中的“Access-Control-Allow-Origin”标头的值不能是通配符“*”是'包括'。因此,'http://localhost:3000'原产地不允许进入。 XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。
有人请帮我解决这个问题。
根据MDN Web Doc,您可以添加主机URL。
解决方案1
可能已经回答了类似的问题。如果这对您不起作用,请尝试解决方案2。
这是stackoverflow的答案:Solution 1
解决方案2
将可能的Access-Control-Allow-Origin值限制为一组允许的源需要服务器端的代码检查Origin请求头的值,将其与允许的源列表进行比较,然后如果Origin值为列表,将Access-Control-Allow-Origin值设置为与Origin值相同的值。
Access-Control-Allow-Origin:https://abc.xyz.gi
所以在你的情况下
Access-Control-Allow-Origin:https://localhost
要么
Access-Control-Allow-Origin:https://127.0.0.1
进一步相关的QA read more on stackeoverflow