我自己做了一个简单的C ++应用程序,它通过HTTP流式传输数据。当我在浏览器中打开服务器IP和端口时,我可以在浏览器窗口中看到该流。但是,从浏览器到C ++服务器的任何XHR请求都会在收到标头后立即从客户端自动关闭。 使用TELNET或PHP甚至没有任何脚本的浏览器都可以毫无问题地为我提供流数据。 将Ajax连接到生成虚拟流的PHP脚本也可以。
可能导致此问题的原因是什么? 它可能是由发送的第一个字节'\ 0'引起的吗? 或者它可能是由于使用的端口不是80?
C ++服务器和PHP脚本都在同一个Debian Linux机器上运行。 JS脚本已经在多种浏览器中进行了测试,包括Opera,Mozzila Firefox和Chrome。
服务器发送theese标题:
write(*con, "HTTP/1.1 200 OK\n",16);
write(*con, "X-Powered-By: Darker\n",21);
write(*con, "Pragma: no-cache\n",17);
write(*con, "Content-Type: text/plain; charset=\"utf-8\"\n",42);
write(*con, "Connection: keep-alive\n",23);
好的,所以在Wireshark和Opera DragonFly的帮助下,我分开了几个问题:
答案 0 :(得分:1)
您应该指明内容长度标头,以字节为单位指示流的确切大小。此外,出于好奇,您是否流式传输纯文本(如您的内容类型所示)?如果是,由于\r\n\r\n
在HTTP