我的node.js服務器精美的作品在我的直播網站「https://www.example.com」,但發展環境引發以下控制檯錯誤:爲什麼node.js服務器不能在我的子域上工作(在WHM服務器上使用cloudflare)?
「的XMLHttpRequest無法加載https://dev.example.com:2083/socket.io/?EIO=3&transport=polling&t=LtTLz1_無‘訪問控制允許來源’標頭是存在的。在請求的資源上,原因'https://dev.example.com'因此不被允許訪問。該響應具有HTTP狀態碼522.「
我使用CloudFlare的,我有兩個Node.js的服務器上運行,現場服務器上的端口2053上運行和開發上的端口2083
我嘗試了幾種方法來添加頁眉接入控制 - 運行允許來源:*並沒有什麼似乎工作。
這裏是我的node.js腳本的頂部:
var fs = require('fs');
var options = {
ca: fs.readFileSync(__dirname + '/ca.pem'),
key: fs.readFileSync(__dirname + '/file.pem'),
cert: fs.readFileSync(__dirname + '/file.crt')
};
var express = require('express'),
app = express();
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
var https = require('https'),
server = https.createServer(options, app),
io = require('socket.io').listen(server);
server.listen(2083);
有我丟失的東西嗎?
這是一個cloudflare連接超時問題,而不是一個CORS問題(仔細檢查配置) – samsonthehero
如果您試圖使一個不同於網頁加載的主機的socket.io連接,那麼您需要或者將CORS支持添加到您的socket.io服務器(以允許跨源連接),或者您需要使socket.io僅與webSocket連接(無初始輪詢),因爲webSocket連接不受CORS影響。 – jfriend00
以下是如何強制socket.io只使用webSocket並避免CORS:[Socket.io 1.x:只使用WebSockets?](https://stackoverflow.com/questions/28238628/socket-io-1x -use-websockets-only/28240802#28240802)和[如何爲CORS配置socket.io](https://stackoverflow.com/a/38749535/816620)。 – jfriend00