缺少 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?