【问题标题】:Elastic Beanstalk stripping Sec-WebSocket-Accept headerElastic Beanstalk 剥离 Sec-WebSocket-Accept 标头
【发布时间】:2017-03-04 09:58:14
【问题描述】:

我正在尝试让 .NET Core 应用程序在弹性 beanstalk 上运行,以从浏览器中的 javascript 接收 websockets 连接。

当我在本地机器上测试 AWS 外部的客户端和服务器时,我能够在两者之间建立 websocket 连接。但是当我将服务器部署到弹性 beanstalk 时,我收到以下错误

WebSocket connection to 'ws://52.62.253.144/' failed: Error during WebSocket handshake: 'Sec-WebSocket-Accept' header is missing

服务器回复 101 Switching Protocols,所以我知道服务器正在尝试建立连接,但缺少 Sec-WebSocket-Accept 标头。在本地测试时,存在此标头。

是否有可能弹性 beanstalk 从响应中剥离 Sec-WebSocket-Accept?它当前配置在“单实例”场景中,而不是自动缩放。

提前致谢

【问题讨论】:

  • 现在遇到了同样的问题。希望有人可以提供帮助

标签: amazon-web-services websocket amazon-elastic-beanstalk


【解决方案1】:

在我的 Tomcat/Java 项目中也发生了同样的事情,最终通过将 ELB 协议切换到 TCP/SSL 来解决。 The official documentation 告诉你如何切换它们,你可以试试这个并告诉我。

【讨论】:

  • +1。我们还有一个使用 ElasticBeanstalk 部署的 Web 套接字的应用程序,我们将 ListenerProtocol 切换到 TCP/SSL 以使其工作。
  • 我现在正在尝试应用程序负载均衡器,这是 AWS 建议我用于 websockets 的方法,但我仍然遇到同样的错误。我试过启用会话粘性。当我绕过负载平衡器并直接访问 IP 时,我也会遇到同样的错误。 EB 处于单实例模式。我所做的一切似乎都不起作用:(
  • 修复了!我必须通过转到服务器管理器 > 管理 > 添加角色和功能 > Web 服务器 > 应用程序开发 > Websockets 在 IIS 8 上安装 Websockets。希望这对其他人有帮助!
【解决方案2】:

AWS 不接受 headers 中的 unserscores(_),而我们可以使用 (-),因此从 header 变量中删除下划线,例如:- header_var_val = "some value" 将其替换为 headervarval =“一些价值”。它对我有用。

【讨论】:

    【解决方案3】:

    它可能不适用于所有人,但我遇到了同样的问题,我意识到大量 cookie 被转发,因为我为网站和 websocket 使用了相同的域。

    当我刷新 cookie 时,Sec-WebSocket-Accept 标头又回来了。

    如果是由于标头长度还是由于 cookie 中的错误字符,会很有趣。

    编辑

    似乎长度是个问题。最佳做法是为 websocket 和站点使用单独的域,因为根据以下问题,在创建 websocket 时无法禁用标头中的 cookie。

    How to disable cookies in Header while creating websocket?

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 2012-03-10
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      相关资源
      最近更新 更多