使用瀏覽器連線websocket伺服器時一切正常,但是使用nodejs ws模組連線時一直報Unexpected response code: 403錯誤,查了很多帖子都沒說明白,最後自己試著一點一點對比模擬瀏覽器請求頭,最終解決問題,解決後程式碼如下:
//TODO 不加這個,會報403錯誤 const options = { headers: { 'Origin': 'http://localhost' } }; let client = new ws(self.url,options); client.on("open", function () { logger.debug("connect success !!!!"); }); client.on("error", function(error) { //錯誤出現之後關閉連線 logger.error('connect error:'+error.message); }); client.on("close", function() { logger.error('與後端伺服器斷開連線!'); }); client.on("message", function(data) { logger.debug('接受到訊息!'); });
其實,修改伺服器端邏輯也可以處理403錯誤問題,原因就是伺服器端拿不到origin,無法保證請求的安全性,所以禁止連線