首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WebSocket 伺服端發送幀被瀏覽器拒絕:伺服端不得掩碼

     編輯:程式設計綜合問答

錯誤:A server must not mask any frames that it sends to the client。WebSocket 規範規定 Client→Server 必須掩碼,Server→Client 絕不可掩碼。手動組幀時若錯誤設定 Mask bit = 1,瀏覽器會直接斷線。

正確幀結構 (Server → Client)

  • FIN=1, RSV=0, Opcode=0x1 (Text)
  • Mask=0
  • Payload length (7/16/64 位編碼)
  • Payload data (UTF-8 字串)

常見錯誤

// 錯誤:設定了 Mask bit
char frame[] = {0x81, 0x80 | len, ...}; // 第2 byte 最高位為 Mask

修正

// 正確:Mask=0
uint8_t frame[2 + len];
frame[0] = 0x81; // FIN=1, Text
frame[1] = len < 126 ? len : (len < 65536 ? 126 : 127);
// 若 len>=126 需額外寫入 2/8 bytes 長度
memcpy(frame+2, payload, len);
send(socket, frame, 2+len, 0);

建議

**不要手工組幀**,直接用成熟庫:

  • C++: Boost.Beast, uWebSockets, libwebsockets
  • Node.js: ws, socket.io
  • Java: Java-WebSocket, Netty
  • Go: gorilla/websocket

庫會自動處理幀封裝、掩碼、分片、心跳、重連等細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved