弹性 Beanstalk 剥离了 Sec-WebSocket-Accept 标头

6
我正在尝试使一个.NET Core 应用在弹性Beanstalk上运行,以便从浏览器中的javascript接收websocket连接。
当我在AWS之外在本地计算机上测试客户端和服务器时,我能够建立两者之间的websocket连接。 但是当我将服务器部署到elastic beanstalk时,我会收到以下错误消息。
WebSocket connection to 'ws://52.62.253.144/' failed: Error during WebSocket handshake: 'Sec-WebSocket-Accept' header is missing

服务器回复了 101 切换协议,因此我知道服务器正在尝试建立连接,但是 Sec-WebSocket-Accept 头标丢失。在本地测试时,这个头标是存在的。
有可能 elastic beanstalk 正在从响应中删除 Sec-WebSocket-Accept 吗?它目前配置为 '单实例' 方案,而不是自动扩展。
提前感谢您。

现在遇到了同样的问题,希望有人能够帮忙。 - Rashid
3个回答

2

我在一个Tomcat/Java项目中也遇到了同样的问题,最终通过将ELB协议切换为TCP/SSL来解决。 官方文档 显示了如何进行切换,您可以尝试一下并让我知道结果。


+1. 我们还有一个使用WebSockets部署在ElasticBeanstalk上的应用程序,我们将ListenerProtocol切换为TCP/SSL以使其正常工作。 - endertunc
我现在正在尝试应用程序负载均衡器,这是AWS建议我用于Websockets的,但我仍然遇到相同的错误。我已经尝试启用会话粘滞。当我绕过负载均衡器直接访问IP时,我也会遇到相同的错误。EB处于单实例模式。无论我做什么都似乎不起作用:( - ChrisBellew
修复了!我必须通过转到服务器管理器>管理>添加角色和功能>Web服务器>应用程序开发>Websockets,在IIS 8上安装Websockets。希望这能帮助其他人! - ChrisBellew

0

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

当我清除了cookie后,Sec-WebSocket-Accept头部就回来了。

有趣的是,我们需要知道这是因为头部长度还是因为cookie中有错误字符。

编辑

看起来长度是问题所在。最佳实践是为websocket和网站使用单独的域名,因为根据以下问题,创建websocket时无法禁用头部中的cookie。

如何在创建websocket时禁用头部中的cookie?


0
AWS不接受下划线(_)作为标头,但我们可以使用(-)。因此,请从标头变量中删除下划线,例如:header_var_val =“some value”,将其替换为headervarval =“some value”。这对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接