我试图在弹性beanstalk上运行.NET Core应用程序,以便在浏览器中接收来自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个交换协议,所以我知道服务器正在尝试建立连接,但是缺少Sec-WebSocket-Accept标头。在本地测试时,此标头存在。
弹性beanstalk是否有可能从响应中剥离Sec-WebSocket-Accept?它目前在“单一实例”中进行配置。场景,而不是自动缩放。
提前致谢
答案 0 :(得分:2)
在Tomcat / Java项目中发生了同样的事情,它最终通过将ELB协议切换到TCP / SSL来解决。 The official documentation向您展示了如何切换它们,您可以尝试一下并让我知道。
答案 1 :(得分:0)
AWS在标题中不接受unserscores(_),尽管我们可以使用(-),所以从标题变量中删除下划线,例如:-header_var_val =“ some value”替换为headervarval =“一些价值”。它对我有用。
答案 2 :(得分:0)
它可能不适用于所有人,但我遇到了同样的问题,并且我意识到转发了大量Cookie的原因是因为我将相同的域用于网站和Websocket。
当我刷新cookie时,Sec-WebSocket-Accept标头又回来了。
知道这是因为标题长度还是因为cookie中的字符错误而引起的。
编辑
长度似乎是问题。最佳做法是将单独的域用于websocket和站点,因为根据以下问题,在创建websocket时无法在标头中禁用cookie。