Lỗi Error: Unexpected server response: 400 khi cố kết nối WebSocket đến https://server.ontaplade.com/socket.io/?EIO=4&transport=websocket thường chỉ ra rằng server không chấp nhận kết nối WebSocket — có thể do một trong các nguyên nhân sau:

Nguyễn Quang Minh

2 min read
270 views

Lỗi Error: Unexpected server response: 400 khi cố kết nối WebSocket đến https://server.ontaplade.com/socket.io/?EIO=4&transport=websocket thường chỉ ra rằng server không chấp nhận kết nối WebSocket — có thể do một trong các nguyên nhân sau:


Nguyên nhân phổ biến & cách xử lý


1. Server không hỗ trợ transport=websocket trực tiếp

  • Socket.IO sử dụng polling trước, sau đó mới upgrade lên websocket. Nếu client khởi tạo kết nối với transport=websocket ngay lập tức, server có thể từ chối nếu chưa được cấu hình đúng.

Cách xử lý:

  • Đảm bảo client cho phép polling trước khi upgrade lên websocket:

const socket = io("https://server.ontaplade.com", {
  transports: ['polling', 'websocket'], // hoặc để mặc định
});

2. Backend chưa bật WebSocket hoặc CORS cấu hình sai

  • Backend cần phải hỗ trợ kết nối WebSocket và cấu hình CORS đúng cách.

Với NestJS + Socket.IO, nên cấu hình như sau:

// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { IoAdapter } from '@nestjs/platform-socket.io';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors({
    origin: '*', // nên chỉ định rõ domain để tăng bảo mật
    credentials: true,
  });
  app.useWebSocketAdapter(new IoAdapter(app));
  await app.listen(3000);
}
bootstrap();

3. Sai phiên bản Socket.IO giữa client và server

  • Socket.IO v4 client không tương thích hoàn toàn với v2 server hoặc ngược lại.

Cách xử lý:

  • Đảm bảo cả client và server dùng cùng phiên bản Socket.IO.

# Kiểm tra phiên bản
npm list socket.io        # server
npm list socket.io-client # client

Nếu mismatch, cập nhật cho đồng bộ:

npm install socket.io@4 socket.io-client@4

4. Cloudflare không cho phép WebSocket?

  • Tuy Cloudflare hỗ trợ WebSocket, nhưng có thể bị chặn bởi cấu hình proxy, firewall rule, hoặc đang dùng plan không hỗ trợ đầy đủ.

Cách xử lý:

  • Vào Cloudflare Dashboard → Network → đảm bảo mục WebSockets đã được bật

  • Kiểm tra các Firewall Rules, Page Rules, hoặc Rate Limiting đang chặn /socket.io


Gợi ý kiểm tra nhanh

  1. Test API health: Mở trình duyệt và thử https://server.ontaplade.com/socket.io/?EIO=4&transport=polling&t=xxx

  2. Sử dụng curl test WebSocket:

curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" \
     -H "Host: server.ontaplade.com" \
     -H "Origin: https://your-client-url.com" \
     https://server.ontaplade.com/socket.io/?EIO=4&transport=websocket

Nếu bạn có thể chia sẻ phần code khởi tạo socket ở client, hoặc cấu hình server, mình có thể giúp debug chi tiết hơn.

Nguyễn Quang Minh

Passionate developer and writer sharing insights about technology, programming, and digital innovation. Follow for more content about web development and tech trends.

1.2K followers
Ôn tập là dễ

Ôn tập là dễ

Nền tảng thi trắc nghiệm số 1 Việt Nam giúp bạn tạo, quản lý và chia sẻ bộ đề một cách nhanh chóng và dễ dàng.

© 2025 Ôn tập là dễ. Tất cả các quyền được bảo lưu.

    🔥 Mua sắm ngay trên Shopee!
    Giúp mình duy trì trang web! 🎉