据我了解,要建立一个事件流,必须在客户端上创建一个事件源对象,然后将其传递给服务器向其进行注册的端点。服务器在接收到此请求后,将适当地设置响应头,并按照事件流格式发送数据。我已经设置了此流程,并且可以通过http进行工作,但是将SSL添加到服务器后,将创建事件流,并且服务器将引发501-未实现错误。经过研究,我认为这可能是CORS问题,并添加了适当的标头,但这也没有任何区别。我还尝试了一些小的修复程序,这些修复程序通常可解决501错误,例如清除浏览器缓存和禁用任何代理设置。我对此完全感到困惑,如果有人可以帮助我理解问题以及解决问题的最佳方法,我将不胜感激。
编辑:
客户端通过aws elb负载均衡器将请求发送到服务器,该负载均衡器从请求中剥离ssl并将请求转发到服务器。除了CORS相关问题外,服务器抛出501错误的另一个可能原因是请求已更改。
此外,通过进一步研究,我了解到内部服务器端事件本质上是HTTP流的一种形式。即使在发送数据之后,该请求仍保持打开状态,直到客户端明确将其关闭为止。考虑到我的第一个直觉是错误的,因此将SSL剥离并转发到服务器,而不更改请求,并且服务器发送响应标头和心跳信号以保持连接有效。
服务器使用Koa编写。 sse注册端点如下所示:
sed
这也是sse事务的客户端的样子:
echo "/Home/in/test_file.txt" | sed 's/\(.*\/\).*/\1/;s/\/$//'