gpt4 book ai didi

javascript - Socket.io - Access-Control-Allow-Origin 不允许来源

转载 作者:搜寻专家 更新时间:2023-10-31 23:06:20 25 4
gpt4 key购买 nike

我知道在 SO 上有过一些关于这个主题的讨论,但我找不到我的问题的答案。我有一个在本地主机上运行 Aptana 的网页:8020。页面上的 javascript 正在访问我在 localhost:1337 上运行的 Node 服务器。这是 Node 代码:

var io = require('socket.io');
var http = require('http');
var sys = require('sys');
var json = [];
var server = http.createServer(function (req, res) {

var headers = {};
headers["Access-Control-Allow-Origin"] = "*";
headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
headers["Access-Control-Allow-Credentials"] = true;
headers["Access-Control-Max-Age"] = '86400'; // 24 hours
headers["Access-Control-Allow-Headers"] = "X-Requested-With, Access-Control-Allow-Origin, X-HTTP-Method-Override, Content-Type, Authorization, Accept";
res.writeHead(200, headers);
res.end();
});
server.listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
var socket = io.listen(server);
socket.on('connection', function(){
console.log("Connected");
});

我通过更改 header 来处理 cors 请求,我一直这样做。我的客户端代码通常是 socket.io 初学者的东西。这是我的代码中的标签:

<script src="http://cdn.socket.io/stable/socket.io.js"></script>
<script>

// Create SocketIO instance
var socket = new io.Socket('localhost',{
port: 1337
});
socket.connect();

// Add a connect listener
socket.on('connect',function() {
log('<span style="color:green;">Client has connected to the server!</span>');
});
// Add a connect listener
socket.on('message',function(data) {
log('Received a message from the server: ' + data);
});
// Add a disconnect listener
socket.on('disconnect',function() {
log('<span style="color:red;">The client has disconnected!</span>');
});

// Sends a message to the server via sockets
function sendMessageToServer(message) {
socket.send(message);
log('<span style="color:#888">Sending "' + message + '" to the server!</span>');
}

// Outputs to console and list
function log(message) {
var li = document.createElement('li');
li.innerHTML = message;
document.getElementById('message-list').appendChild(li);
}

当我运行代码时,我不断收到“XMLHTTPRequest...Origin is not allowed by Access-Control-Allow-Origin”错误。我的浏览器是 chrome。1. 为什么我的浏览器使用 XMLHTTPRequest 而不是 Websocket?2. 为什么在更改标题时会出现访问控制错误?感谢您提前提供的所有帮助。

最佳答案

根据 socket.io 文档,您应该能够设置传输的优先级(如果它产生问题,可能会跳过一个)并直接配置 socket.io 源。

io.set('transports', ['websocket', 'xhr-polling', 'jsonp-polling', 'htmlfile', 'flashsocket']);
io.set('origins', '*:*');

关于javascript - Socket.io - Access-Control-Allow-Origin 不允许来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14705941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com