1. 首页
  2. JAVASCRIPT
  3. 解决nginx 反代 websocket 400 express.js socket.io

解决nginx 反代 websocket 400 express.js socket.io

failed: Error during WebSocket handshake: Unexpected response code: 400解决方法:在nginx的站点配置文件中增加持久化配置信息&...

TIM图片20170831145630.jpg 解决nginx 反代  websocket 400 express.js socket.io JAVASCRIPT

failed: Error during WebSocket handshake: Unexpected response code: 400

解决方法:


在nginx的站点配置文件中增加持久化配置信息

    location / 
    {
    ....
        #持久化连接相关配置
        proxy_connect_timeout 30s;
        proxy_read_timeout 86400s;
        proxy_send_timeout 30s;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
   ...
   }

        

添加后,就会增加 

upgrade



原因:


典型的Websocket握手
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: XXXXXXXXXXXXXXXXXX==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
这段类似HTTP协议的握手请求中,多了upgrade 由于nginX中没有配置这个转发,导致websocket无法正常建立连接

Upgrade: websocket
Connection: Upgrade


为什么不改也能用:


原因:

因为socket.io支持xhr-polling 所以在websocket不能建立连接后,会自动切换成xhr-polling 进行连接.



哎哎
相关推荐