[NodeJS + Socket.IO + SSL] Verbinding komt niet tot stand.
Een tijd geleden ben ik begonnen met het experimenteren met nodejs en socket.io. Tot zo ver, lukt dat allemaal prima, alleen wou ik nu graag een beveiligde socket.io verbinding open zetten tussen de socket.io server en de web client.
Ik heb een geldig certificaat tot mijn beschikking die op de server draait waar ook het domein van beveiligd is.
Nu kom ik op het probleem, dat zodra ik wil verbinden naar de server, ik de volgende foutmelding krijg in de console van google chrome:
Ik heb daarbij de header toegevoegd in de https server, op de volgende manier:
Als ik de server start, en via socket.io probeer te verbinden krijg ik dus die foutmelding. Maar als ik de headers op haal van de HTTPS server, dan krijg ik het volgende;
Waarbij de headers wel gewoon zijn door gevoerd.
Kan iemand me uitleggen wat het probleem is, of me veder helpen?
Alvast bedankt!
Ik heb een geldig certificaat tot mijn beschikking die op de server draait waar ook het domein van beveiligd is.
Nu kom ik op het probleem, dat zodra ik wil verbinden naar de server, ik de volgende foutmelding krijg in de console van google chrome:
Code (php)
1
XMLHttpRequest cannot load https://domain.tld:12457/socket.io/1/?t=1403871407291. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://domain.tld' is therefore not allowed access.
Ik heb daarbij de header toegevoegd in de https server, op de volgende manier:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var https = require ('https');
var fs = require ('fs');
var options = {
key: fs.readFileSync('./cert/private.key'),
cert: fs.readFileSync('./cert/certificate.crt'),
//requestCert: true,
ca: [ fs.readFileSync('./cert/ca.pem'), fs.readFileSync('./cert/sub.class1.server.ca.pem') ]
};
var server = https.createServer (options, function (req, res) {
res.setHeader("Access-Control-Allow-Origin", "https://domain.tld");
res.writeHead (200);
res.end ("Nothing to see here :o");
});
var socketio = require ('socket.io').listen (server);
server.listen (12457);
var fs = require ('fs');
var options = {
key: fs.readFileSync('./cert/private.key'),
cert: fs.readFileSync('./cert/certificate.crt'),
//requestCert: true,
ca: [ fs.readFileSync('./cert/ca.pem'), fs.readFileSync('./cert/sub.class1.server.ca.pem') ]
};
var server = https.createServer (options, function (req, res) {
res.setHeader("Access-Control-Allow-Origin", "https://domain.tld");
res.writeHead (200);
res.end ("Nothing to see here :o");
});
var socketio = require ('socket.io').listen (server);
server.listen (12457);
Als ik de server start, en via socket.io probeer te verbinden krijg ik dus die foutmelding. Maar als ik de headers op haal van de HTTPS server, dan krijg ik het volgende;
Code (php)
1
2
3
4
2
3
4
HTTP/1.1 200 OK =>
Access-Control-Allow-Origin => https://domain.tld
Date => Fri, 27 Jun 2014 12:18:45 GMT
Connection => close
Access-Control-Allow-Origin => https://domain.tld
Date => Fri, 27 Jun 2014 12:18:45 GMT
Connection => close
Waarbij de headers wel gewoon zijn door gevoerd.
Kan iemand me uitleggen wat het probleem is, of me veder helpen?
Alvast bedankt!
Ik denk - maar ben niet zeker -, dat de statische HTML pagina waarop je de socket.io connectie probeert op te zetten via HTTP gebeurt. Dan is er een conflict tussen beide domeinen en moet je oftewel de HTML pagina én de socket.io connectie via HTTPS doen of je moet de header omzetten naar het http:// domein.
Dit is wat ik denk met mijn weinige ervaring hierin.
Dit is wat ik denk met mijn weinige ervaring hierin.
Bedankt voor je reactie.
Ik had hier ook over na gedacht, en ben er zeker van dat ook de statische HTML pagina op de HTTPS verbinding draait, en op het zelfde domein draait (geen subdomein of iets dergelijks).
Ik had hier ook over na gedacht, en ben er zeker van dat ook de statische HTML pagina op de HTTPS verbinding draait, en op het zelfde domein draait (geen subdomein of iets dergelijks).




