我为自己制作了一个简单的 C++ 应用程序,通过 HTTP 流式传输数据。当我在浏览器中打开服务器 IP 和端口时,我可以在浏览器窗口中看到流。但是从浏览器向 C++ 服务器发出的任何 XHR 请求都会在收到标头后立即从客户端自动关闭。使用 TELNET 或 PHP 甚至没有任何脚本的浏览器可以毫无问题地为我提供流数据。将 Ajax 连接到生成虚拟流的 PHP 脚本也可以。
什么可能导致这个问题?可能是因为发送的第一个字节是“\0”吗?或者它可能是由于使用的端口不是80引起的?
C++ 服务器和 PHP 脚本都在同一台 Debian Linux 机器上运行。JS 脚本已经在多种浏览器中进行了测试,包括 Opera、Mozzila Firefox 和 Chrome。
服务器发送这些标头:
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 的帮助下,我分离了几个发生的问题:
- HTTPRequest 中的“responseText”始终是“”(一个空字符串),尽管在 Wireshark 中我可以很容易地看到数据被正确接收。
- 接收响应时,“readyState”始终为 4,即使流尚未从服务器端结束。