缺少 Websocket 标头

Posted

技术标签:

【中文标题】缺少 Websocket 标头【英文标题】:Websocket header missing 【发布时间】:2013-08-19 14:56:11 【问题描述】:

我在 Rails 3.2.13 中使用 'faye' gem。在开发中,我在 localhost:9292 上运行 faye,在 localhost:3000 上运行我的应用程序。我可以通过命令行的 curl 请求激活弹出窗口,但我无法在我的应用程序中建立连接。我在控制台中遇到的错误是:

与“ws://localhost:9292/faye”的 WebSocket 连接失败:WebSocket 握手期间出错:“升级”标头丢失

我正在尝试在我的 application.js 文件中为 faye 定义一个标头:

$(function() 
  var faye = new Faye.Client("http://localhost:9292/faye");
  faye.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
  faye.subscribe('/messages', function (data) 
  alert(data);
  );
);

这是添加标题的正确方法吗?

我在这里发现了一个类似问题的讨论:https://github.com/faye/faye/issues/222 在这种情况下,错误似乎与未加载 ssl 设置有关。我检查了我的 rack gem 的 lib 目录,发现

def ssl?
  scheme == 'https'
end

这看起来不错。我如何知道设置是否未正确加载?

任何关于下一步看哪里的线索将不胜感激。

【问题讨论】:

这是跟随 railscast 的吗?我有同样的问题。 【参考方案1】:

我在关注 Ryan Bates 的 railscast 时遇到了同样的问题: http://railscasts.com/episodes/260-messaging-with-faye

Faye Web 套接字服务器需要适配器才能在 Thin Web 服务器上运行并发送升级标头。

将此行添加到您的 Faye rackup 文件 (.ru) 将通过机架中间件加载适配器:

Faye::WebSocket.load_adapter('thin')

我在这里找到了这个解决方案: https://github.com/ryanb/private_pub/issues/39#issuecomment-4225647

【讨论】:

以上是关于缺少 Websocket 标头的主要内容,如果未能解决你的问题,请参考以下文章

失败:WebSocket 握手期间出错:“Sec-WebSocket-Accept”标头值不正确

如何在 Web 套接字标头中设置 Sec-WebSocket-Key?

将自定义标头设置为 websocket 请求 (ktor)

WebSocket JS 的自定义标头

如何在 Javascript 中为 websocket 的请求标头设置 cookie?

带有授权标头的 Websocket 连接