簡體   English   中英

從 nodeJS 服務器連接到 webscoket,給出“意外的服務器響應:403”

[英]Connecting to webscoket from nodeJS server giving 'Unexpected server response: 403'

我正在嘗試使用nodeJS websocket客戶端連接到WebSocket地址(例如'wss://mycompany.com'): https://github.com/ 我可以使用MDN 的 WebSocket API在瀏覽器中成功測試連接,但是在使用 nodeJS WebSocket 客戶端時出現以下連接錯誤:

error: Error: Unexpected server response: 403
  at ClientRequest.<anonymous> (oda-node-sdk\node_modules\ws\lib\websocket.js:579:7)
  at ClientRequest.emit (events.js:310:20)
  at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:596:27)
  at HTTPParser.parserOnHeadersComplete (_http_common.js:119:17)
  at TLSSocket.socketOnData (_http_client.js:469:22)
  at TLSSocket.emit (events.js:310:20)
  at addChunk (_stream_readable.js:286:12)
  at readableAddChunk (_stream_readable.js:268:9)
  at TLSSocket.Readable.push (_stream_readable.js:209:10)
  at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23)

服務器端是企業代碼,為我提供 WebSocket 主機 URL((例如“wss://mycompany.com”))。 我為 wss://echo.websocket.org 成功測試了下面的客戶端代碼,但得到了 wss://mycompany.com 的上述錯誤。 我嘗試通過 mycompany 的代理隧道進行連接,但也無濟於事。 任何人都可以提出可能的原因嗎?

客戶端代碼:

var WebSocket = require('ws');

const ws = new WebSocket('wss://echo.websocket.org');

ws.on('open', function open() {
    console.log('connected')
    ws.send('something');
});

ws.on('message', function incoming(data) {
    console.log(data);
});

ws.on('error', (error)=> {
    console.log(error);
});

意外的服務器響應 403 錯誤是由於服務器識別連接請求但未能授權它並且不允許連接。 連接被服務器拒絕,因為沒有設置來源 header。 NodeJS WebSocket的文檔將其描述為:

如果verifyClient未設置,則自動接受握手。 如果它提供了一個參數,那么就是:

信息 {對象}

  • origin {String} 客戶端指示的 Origin header 中的值。

  • req {http.IncomingMessage} 客戶端 HTTP GET 請求。

  • 安全 {Boolean} 如果設置了 req.connection.authorized 或 req.connection.encrypted,則為 true。

對於正確設置原點的部分,您可以查看如何從 Javascript 中設置 WebSocket 原點 Header?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM