Socket.io - Herkunft nicht erlaubt, Access-Control-Allow-Origin
Ich weiß, es gab einige Diskussionen zu diesem Thema auf, aber ich kann nicht finden, die Antwort auf meine Frage. Ich habe eine web-Seite läuft auf dem server mit Aptana auf localhost:8020. Das javascript auf der Seite ist das schlagen von Knoten-server habe ich auf localhost:1337. Hier ist die node-code:
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");
});
Ich bin Umgang mit der cors Anfrage durch ändern der Header, die ich die ganze Zeit mache. Meine client-side code in der Regel-Buchse.io-Anfänger-Kram. Hier ist der tag von meinem code:
<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);
}
Wenn ich den code bekomme ich immer wieder 'XMLHTTPRequest...Herkunft ist nicht erlaubt, Access-Control-Allow-Origin' - Fehler. Mein browser ist chrome.
1. Warum ist mein browser mithilfe von XMLHTTPRequest und nicht eine Websocket?
2. Warum erhalte ich eine " Access control Fehler, wenn ich mich verändert den Header?
Vielen Dank für alle Hilfe im Voraus.
Ich Tat dies herauszufinden, und ich muss die post die volle Antwort, aber es hat schon eine Weile und ich muss schauen, über was ich getan habe. Geben Sie mir einige weitere details, auf das, was dein spezifisches problem ist.
Ich bin auch in dieses problem, und wäre daran interessiert zu hören, Ihre Lösung. Die einzige Lösung, die ich habe kommen mit ist nicht ideal, da es sich um hacking "manager.js" code in die Steckdose.io-library ändern Sie die Zeile, wo es erklärt Header['Access-Control-Allow-Origin'] = '*'; Es muss einen besseren Weg geben...
InformationsquelleAutor jhamm | 2013-02-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß Buchse.io-Dokumentation, die Sie sollten in der Lage sein, um sowohl die Priorität der Transporte (und vielleicht überspringen, wenn es Probleme schafft) und konfigurieren-Buchse.io Ursprung direkt.
InformationsquelleAutor jornare
Ihre benutzerdefinierten Header eigentlich nie geschrieben, für die Steckdose.io-bezogenen Anforderungen.
Buchse.IO überschreibt einige Methoden des http-Servers. Einer von Ihnen ist der Anstoß für die 'request' - Handler. Socket.IO-nur lässt sich der primär-handler alle Anfragen. Dann prüft es, ob die Anfrage ist eigentlich eine Steckdose.E /a-Anforderung (basierend auf dem Präfix des Pfades angefordert). Wenn es feststellt, dass es nicht mit einem konkreten Wunsch, den es auslöst, den anderen 'request' - Handler.
Können Sie sehen, dass Sie nur setzen eine Konsole.log-Anweisung aus, bevor Ihr writeHead rufen, und Sie werden sehen, dass nichts angezeigt wird in stdout.
Lesen der source code, es scheint, dass die Buchse.io setzt automatisch eine
Access-Control-Allow-Origin
- header mit dem Wert derorigin
- header der Anforderung an. Ich würde davon ausgehen, es ist eine Möglichkeit, um solch eine überschrift auf dem client als auch.So, um die Sache aufzuklären:
1 Ihrem browser falsl zurück, xhr-polling, da es keine Unterstützung für websockets oder der websocket-transport schlägt im hintergrund fehl,
2 Die überschriften setzen Sie sich in den httpServer
request
Ereignis nie geschickt bekommen, so haben Sie keine Aktion auf der origin-Policy.Lösung: einen Weg finden, die
origin
- header der Anfrage. Nach dem Crawlen durch den client-code, ich habe keine Beweise gefunden, dass dies kann leicht getan werden.InformationsquelleAutor Floby
Eine Sache zu beachten ist, dass der Wert " * " kann verwendet werden, in die Access-Control-Allow-Origin-header, wenn Access-Control-Allow-Credentials ist wahr. Entfernen Sie entweder die Access-Control-Allow-Credentials-header oder im set Access-Control-Allow-Origin auf den Wert der Anfrage Origin-header.
InformationsquelleAutor monsur