2014-10-04 62 views
3

我設置了一個節點服務器,並在激活ssl(官方,非自分配證書)時收到錯誤消息。使用ssl和Access-Control-Header的socket.io/node.js

錯誤消息:

XMLHttpRequest cannot load https://servername:8081/socket.io/... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://servername' is therefore not allowed access. results:1 

但實際上,我包括在我的.htaccess文件下面的代碼:

<IfModule mod_headers.c> 
    Header set Access-Control-Allow-Origin * 
    Header set Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT" 
</IfModule> 

的阿帕奇頭模塊安裝。

我的服務器:

var fs = require('fs'); 
var https = require('https'); 
var express = require ('express'); 

var options = { 
    key: fs.readFileSync('path to key'), 
    cert: fs.readFileSync('path to cert'), 
    ca: fs.readFileSync('path to ca') 
}; 

app = express() 
https.createServer(options,app).listen(8081) 
var io = require('socket.io')(https); 

io.sockets.on('connection', function (socket) { 
... 
} 

我的客戶:

<script language="JavaScript"> 
    var socket = io.connect('https://servername:8081'); 
    socket.emit(...); 
</script> 

沒有任何人有一個想法,這裏有什麼問題?提前致謝!

回答

0

好吧,我在這裏看到幾件事情:

  • 您需要包括socket.io LIB 在客戶端像這樣:

    <script src="https://servername:8081/socket.io/socket.io.js"></script> 
    
  • 設置安全參數設置爲true (在您的客戶端

    var socket = io.connect('https ://servername:8081', {secure: true}); 
    
  • 並添加這些行到你的SSL選項:

    agent: false, 
    requestCert: true, 
    rejectUnauthorized: false 
    
  • 然後如果仍然不工作,你可以嘗試設置你的服務器使用:

    io.set('match origin protocol', true); 
    
+0

感謝你的回覆。它變得越來越好,但現在我得到了錯誤「[阻止]'https:// servername'頁面通過HTTPS加載,但運行不安全的內容'ws://servername/socket.io/?EIO = 3&transport = websocket&sid = HXfZn3PhvDcimhztAAAC':這個內容也應該通過HTTPS加載 socket.io.js:4519 未捕獲SecurityError:未能構造'WebSocket':不可能從通過HTTPS加載的頁面啓動不安全的WebSocket連接 – Ellen 2014-10-05 07:07:20

+0

AND :當啓動節點服務器時,它說:「選項匹配原點協議無效。請參閱自述文件。「 – Ellen 2014-10-05 07:08:06