简体   繁体   English

与'ws:// ... / websocket'的Meteor WebSocket连接失败:WebSocket握手期间出错:意外的响应代码:400

[英]Meteor WebSocket connection to 'ws://…/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400

I am brand new to things like Meteor.JS, and was wondering about this error. 我对像Meteor.JS这样的东西很陌生,并且想知道这个错误。 I started the test project (with the button click meter) and it works, but then I go into the console and see WebSocket connection to 'ws://shibe.ninja/sockjs/243/5gtde_n9/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400 I don't know how to fix it. 我启动了测试项目(使用按钮点击计)并且它可以工作,但是我进入控制台并看到WebSocket connection to 'ws://shibe.ninja/sockjs/243/5gtde_n9/websocket' failed: Error during WebSocket handshake: Unexpected response code: 400我不知道如何解决它。 Thanks 谢谢

Maybe a little late but in case you still stuck on this. 也许有点晚,但万一你仍然坚持这一点。 I got the same issue when deploying the app and using nginx as proxy. 在部署应用程序并使用nginx作为代理时,我遇到了同样的问题。

location / {
     proxy_pass http://127.0.0.1:3000;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "Upgrade";
}

Check also the nginx docs here: http://nginx.com/blog/websocket-nginx/ 另请查看nginx文档: http//nginx.com/blog/websocket-nginx/

I bumped into this problem myself, but I already had my proxy headers set correctly and it was still not working. 我自己碰到了这个问题,但我已经正确设置了我的代理头 ,但它仍然无法正常工作。 But apparently Cloudflare is causing issues. 但显然Cloudflare正在引发问题。 Here is a great article on the subject: https://meteorhacks.com/cloudflare-meets-meteor 这是一篇关于这个主题的精彩文章: https//meteorhacks.com/cloudflare-meets-meteor

As far as I've found, there are three solutions: 据我所知,有三种解决方案:

Option 1: Use CloudFlare enterprise, which supports sockets. 选项1:使用支持套接字的CloudFlare企业。

Option 2: Disable Meteor WebSockets, which will affect your performance as it fallbacks back to use sock.js as a replacment. 选项2:禁用Meteor WebSockets,这将影响您的性能,因为它回退使用sock.js作为替换。 To do this, just set your meteor environment like this: 要做到这一点,只需设置你的流星环境:

export DISABLE_WEBSOCKETS=1

Option 3: In Cloudflare, create a ddp subdomain for the websocket (ddp.yourdomain.com), then disable Cloudflare on the new subdomain. 选项3:在Cloudflare中,为websocket(ddp.yourdomain.com)创建一个ddp子域,然后在新子域上禁用Cloudflare。 After that set your meteor environment like this: 之后设置你的流星环境如下:

export DDP_DEFAULT_CONNECTION_URL=http://ddp.example.com

After this my nginx config needed some adjustments, as this has now become a cross-origin (CORS) setup. 在此之后我的nginx配置需要一些调整,因为这现在已成为跨源(CORS)设置。 This is my new nginx config: 这是我新的nginx配置:

map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}

server {
  listen 80 proxy_protocol;
  listen [::]:80 proxy_protocol;

  server_name mydomain.com ddp.mydomain.com;

  ## This allows the CORS setup to work
  add_header Access-Control-Allow-Origin 'http://example.com';

  ## This hides the CORS setup from the Meteor server
  ## Without this the header is added twice, not sure why?
  proxy_hide_header Access-Control-Allow-Origin;

  ## Idealy the two options above should be disabeled,
  ## Then use this one instead, but that caused issues in my setup.
  # proxy_set_header Access-Control-Allow-Origin 'http://example.com';

  location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host; # pass the host header
    proxy_set_header Upgrade $http_upgrade; # allow websockets
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header X-Real-IP $remote_addr; # Preserve client IP
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_http_version 1.1;

    # Meteor browser cache settings (the root path should not be cached!)
    if ($uri != '/') {
      expires 30d;
    }
  }
}

Finally, remember to restart nginx. 最后,记得重新启动nginx。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 WebSocket 连接到“ws://localhost:8000/”失败:WebSocket 握手期间出错:意外响应代码:403 - WebSocket connection to 'ws://localhost:8000/' failed: Error during WebSocket handshake: Unexpected response code: 403 WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:400 - WebSocket connection failed: Error during WebSocket handshake: Unexpected response code: 400 Spring 启动 WebSocket 连接到“ws://127.0.0.1:8081/getUsersList/”失败:WebSocket 握手期间出错:意外响应代码:200 - Spring boot WebSocket connection to 'ws://127.0.0.1:8081/getUsersList/' failed: Error during WebSocket handshake: Unexpected response code: 200 WebSocket连接到 <url> 失败:WebSocket握手期间出错:意外的响应代码:404 - WebSocket connection to <url> failed: Error during WebSocket handshake: Unexpected response code: 404 与&#39;wss:// localhost:44300 / Home / websocketcon&#39;的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:404 - WebSocket connection to 'wss://localhost:44300/Home/websocketcon' failed: Error during WebSocket handshake: Unexpected response code: 404 WebSocket 连接到...失败:WebSocket 握手期间出错:意外响应代码:200 - WebSocket connection to ... failed: Error during WebSocket handshake: Unexpected response code: 200 WebSocket 握手期间的 WebSockets WS 错误:意外的响应代码:200 - WebSockets WS error during WebSocket handshake: Unexpected response code: 200 Sailsjs:WebSocket握手期间出错:意外的响应代码:400 - Sailsjs: Error during WebSocket handshake: Unexpected response code: 400 连接时的Socket Io错误(WebSocket握手过程中的错误:意外的响应代码:400) - Socket Io Error on connection (Error during WebSocket handshake: Unexpected response code: 400) 失败:WebSocket握手期间出错:意外的响应代码:使用Arduino的400 - failed: Error during WebSocket handshake: Unexpected response code: 400 using Arduino
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM